使用char和uint8_t类型重载函数



要实现LCD的基本接口,我需要为所有基本类型编写函数print。我需要写

void print(char c);

以及

void print(uint8_t c);

第一个函数告诉:;我想写字符CCD_ 2";,第二个告诉;我想写数字c";。这两个函数有不同的含义,所以我需要它们。

问题是uint8_tchar的typedef。如果我打电话给

print(20u);

编译器给出错误,因为它不知道要选择哪个版本的CCD_。

我的问题是:如何解决这个问题?

我的解决方案:

  1. 定义两个不同的函数:
void print(char c);
void print_number(uint8_t x);
void print(uint16_t x);
...

此解决方案的问题在于,您必须记住,当您想要打印uint8_t时,必须调用print_number。这使我需要编写的所有通用代码复杂化。我不认为这是"解决方案"。

  1. 编写适当的类uint8_t,并使用我自己的版本,而不是使用标准的uint8_t。这个解决方案有不同的问题:

    • 我不认为有一个替代标准类型uint8_t的好主意
    • 如果我编写自己版本的uint8_t,例如,为了一致性,Uint8_t,我也必须编写所有其他类型(Uint16_tUint32_t…(,我也不喜欢这样
  2. ???有什么想法吗?

谢谢。

好的,所以这可能不是你想要的解决方案,但如果你在传递参数时键入cast,它会起作用
print((char) 20u)将调用print(char c)
并且
print((uint8_t) 20u)将调用print(uint8_t c)

相关内容

  • 没有找到相关文章

最新更新