C ++最佳实践:接受uint8_t,uint16_t,uint32_t,float的函数

时间:2018-05-17 08:08:31

标签: c++

我有一套(潜在的重载)功能:

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

在函数内部我必须知道,如果数据是uint8_tuint16_t等,

我该怎么办? 还有另一种方式,例如     write(uint16_t index, uint16_t subindex, int data, enum type)

1 个答案:

答案 0 :(得分:3)

调用不明确,因为编译器不知道您要调用哪个版本的函数。例如,使用方式如下:

write(1, 2, 3);

什么是3?可以是uint8_tuint16_t或其他人......

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

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