首页 > 解决方案 > C++ 最佳实践:接受 uint8_t、uint16_t、uint32_t、float 的函数

问题描述

我有一组(潜在的重载)函数:

write(uint16_t index, uint16_t subindex, uint8_t  data)
write(uint16_t index, uint16_t subindex, uint16_t data)
write(uint16_t index, uint16_t subindex, uint32_t data)
write(uint16_t index, uint16_t subindex, float    data)

尽管例如typedef unsigned short int uint16_t;当我将鼠标悬停在Eclipse 上时uint16_t,我向我展示了这个错误:

call of overloaded ‘`write(int, int, int)`’ is ambiguous

在函数内部,我必须知道,如果 data 是uint8_t,uint16_t等。

我能做些什么?还有其他方法吗,例如 write(uint16_t index, uint16_t subindex, int data, enum type)

标签: c++

解决方案


该调用是模棱两可的,因为编译器不知道您要调用哪个版本的函数。例如,这样的用法:

write(1, 2, 3);

是什么3?它可能是uint8_tuint16_t或其他...

编译器不会猜测并可能会做一些疯狂的事情,而是告诉您它不知道。您可以通过多种方式解决此问题:

  1. 为您的函数定义不同的名称,例如。writeUInt8t(... , uint8_t in)
  2. 准确指定在使用该函数时要调用哪个:write(1, 2, static_cast<uint8_t>(3))

推荐阅读