要实现LCD的基本接口,我需要为所有基本类型编写函数print
。我需要写
void print(char c);
以及
void print(uint8_t c);
第一个函数告诉:;我想写字符CCD_ 2";,第二个告诉;我想写数字c
";。这两个函数有不同的含义,所以我需要它们。
问题是uint8_t
是char
的typedef。如果我打电话给
print(20u);
编译器给出错误,因为它不知道要选择哪个版本的CCD_。
我的问题是:如何解决这个问题?
我的解决方案:
- 定义两个不同的函数:
void print(char c);
void print_number(uint8_t x);
void print(uint16_t x);
...
此解决方案的问题在于,您必须记住,当您想要打印uint8_t
时,必须调用print_number
。这使我需要编写的所有通用代码复杂化。我不认为这是"解决方案"。
编写适当的类
uint8_t
,并使用我自己的版本,而不是使用标准的uint8_t
。这个解决方案有不同的问题:- 我不认为有一个替代标准类型
uint8_t
的好主意 - 如果我编写自己版本的
uint8_t
,例如,为了一致性,Uint8_t
,我也必须编写所有其他类型(Uint16_t
、Uint32_t
…(,我也不喜欢这样
- 我不认为有一个替代标准类型
???有什么想法吗?
谢谢。
好的,所以这可能不是你想要的解决方案,但如果你在传递参数时键入cast,它会起作用print((char) 20u)
将调用print(char c)
并且print((uint8_t) 20u)
将调用print(uint8_t c)