我尝试使用Serial.print实现简单记录内容的puts
方法
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'
答案 0 :(得分:1)
你不能在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的原因,如果你能提供帮助的话。