Какой тип переменной использует Serial.print()?

В arduino мне нужно использовать Serial.print() внутри такой функции, как;

void loop()
{
    serial_send(any_type);
}

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

Serial.print может принимать переменные любого типа, такие как int, double или String. Как я могу получить такое же поведение с serial_send, чтобы мне не нужно было указывать тип?


person bladekel    schedule 23.08.2019    source источник
comment
Почему бы не поискать в Google Serial.pring arduino и нажать один из первые результаты узнать?   -  person Tomáš Zato - Reinstate Monica    schedule 23.08.2019
comment
@TomášZato Я думаю, что смысл вопроса здесь в том, чтобы понять, как возможно такая функция, как Serial.print(), может принимать аргументы любого типа — я полагаю, что ОП может захотеть написать свой собственный функции, которые могут принимать любой тип. Это хороший вопрос. Ответ можно найти в исходном коде, но ОП может не знать, где его найти.   -  person Caleb    schedule 23.08.2019
comment
@Caleb Извините, я неправильно понял вопрос.   -  person Tomáš Zato - Reinstate Monica    schedule 23.08.2019


Ответы (2)


Для этого есть шаблоны. С использованием

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

вы можете вызывать send_message с любым типом, который вы хотите, и пока print имеет для него перегрузку, он будет работать. В противном случае вы получите сообщение об ошибке из-за отсутствия соответствующего вызова print.

person NathanOliver    schedule 23.08.2019

Это не один 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, вы можете использовать функцию шаблона из ответа Натана Оливера. Компилятор сгенерирует функцию на основе шаблона для каждого типа параметра, используемого в вашем скетче с шаблоном.

person Juraj    schedule 23.08.2019