c++ - 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)
?
解决方案
该调用是模棱两可的,因为编译器不知道您要调用哪个版本的函数。例如,这样的用法:
write(1, 2, 3);
是什么3
?它可能是uint8_t
或uint16_t
或其他...
编译器不会猜测并可能会做一些疯狂的事情,而是告诉您它不知道。您可以通过多种方式解决此问题:
- 为您的函数定义不同的名称,例如。
writeUInt8t(... , uint8_t in)
- 准确指定在使用该函数时要调用哪个:
write(1, 2, static_cast<uint8_t>(3))
推荐阅读
- python - 从网站抓取数据并在 jira 页面上执行任务
- plugins - 在搜索文本字段中输入的文本未传入参数
- python - 如何在python中关闭先前运行的进程/应用程序实例?
- php - ErrorException 试图访问 null 类型值的数组偏移量
- python - 将 Python 脚本的返回值传递给 VB 脚本
- javascript - 如何通过jquery制作一个json
- assembly - 为什么我在 x86 中收到核心转储错误?
- python - 如何在一行中搜索特定单词
- java - 一段时间后Mysql无法连接
- drupal - 无论如何检查Drupal中过去的日志?