在 arduino 上,我需要在类似的函数中使用 Serial.print();
void loop()
{
serial_send(any_type);
}
void serial_send(type message)
{
Serial.print(message);
}
Serial.print
可以接受任何类型的变量,例如int
,double
或String
. 我怎样才能获得相同的行为,serial_send
所以我不必指定类型?
在 arduino 上,我需要在类似的函数中使用 Serial.print();
void loop()
{
serial_send(any_type);
}
void serial_send(type message)
{
Serial.print(message);
}
Serial.print
可以接受任何类型的变量,例如int
,double
或String
. 我怎样才能获得相同的行为,serial_send
所以我不必指定类型?
这就是模板的用途。使用
template <typename T>
void serial_send(T message)
{
Serial.print(message);
}
你可以send_message
用你想要的任何类型调用,print
只要它有重载就可以了。如果不是,您将收到一个错误,因为没有匹配到print
.
它不是一个Serial.print
。对于具有不同参数的许多函数,函数名称print
被“重载”。摘自Print.h
size_t print(const __FlashStringHelper *);
size_t print(const String &);
size_t print(const char[]);
size_t print(char);
size_t print(unsigned char, int = DEC);
size_t print(int, int = DEC);
size_t print(unsigned int, int = DEC);
size_t print(long, int = DEC);
size_t print(unsigned long, int = DEC);
size_t print(double, int = 2);
size_t print(const Printable&);
如果要包装 Serial.print 函数,可以使用 NathanOliver 的答案中的模板函数。编译器将根据模板为草图中使用的每个参数类型生成一个函数。