gpt4 book ai didi

c++ - 在 C++ 或 Arduino 中,如何在函数中接受未知类型的参数?

转载 作者:行者123 更新时间:2023-11-28 06:08:46 26 4
gpt4 key购买 nike

我正在尝试实现一个 puts 方法,该方法仅使用 Serial.print 记录内容

void puts(char explanation, void value){
if (log){
Serial.print(explanation);
Serial.println(value);
}
}

像这样调用它

puts('hello', 12);puts('hello', 'foo');

目前我收到错误 'value' has incomplete type

如果我在声明中使用 void* value,我会得到错误 invalid conversion from 'int' to 'void'

最佳答案

你实际上不能在 C/C++ 中使用“未知”类型;您可以使用任意类型,但必须有人知道如何正确处理它。

幸运的是,只要有人知道如何处理它,C++ 就提供了一种解决方案:模板。我们可以定义一个采用任意类型的函数,编译器将根据需要实例化尽可能多的函数拷贝,以处理抛给它的所有类型(如果可能):

namespace
{
template<typename T>
void puts(char *explanation, T value){
if (log){
Serial.print(explanation);
Serial.println(value);
}
}
}

void loop() {
puts("hello", 12);
puts("goodbye", "foo");
delay(1000);
}

(我们在上面的示例中使用了 namespace,因为 LOL Arduino IDE 。)

当然,缺点是每个函数实例化都会占用额外的闪存,这就是为什么如果可以的话,您可能不想使用超过 3 或 4 个。

关于c++ - 在 C++ 或 Arduino 中,如何在函数中接受未知类型的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31756504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com