2

在 arduino 上,我需要在类似的函数中使用 Serial.print();

void loop()
{
    serial_send(any_type);
}

void serial_send(type message)
{
   Serial.print(message);
}

Serial.print可以接受任何类型的变量,例如int,doubleString. 我怎样才能获得相同的行为,serial_send所以我不必指定类型?

4

2 回答 2

5

这就是模板的用途。使用

template <typename T>
void serial_send(T message)
{
   Serial.print(message);
}

你可以send_message用你想要的任何类型调用,print只要它有重载就可以了。如果不是,您将收到一个错误,因为没有匹配到print.

于 2019-08-23T14:53:35.113 回答
2

它不是一个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 的答案中的模板函数。编译器将根据模板为草图中使用的每个参数类型生成一个函数。

于 2019-08-23T17:02:50.787 回答