Я использую Arduino, и я хотел бы знать, если есть функция, которая возвращает тип данных переменной. То есть я хотел бы запустить что-то вроде следующего:
// Note: 'typeof' is a sample function that should return the data type.
Serial.println(typeof(myVar));
Ответы:
В типичной программе на C ++ вы бы использовали
typeid
оператор, например так:Однако для этого требуется функция компилятора, которая называется Информация о типе времени выполнения (RTTI). Он отключен в Arduino IDE, по-видимому, потому что он увеличивает требования к памяти во время выполнения программы.
Вы можете получить больше информации о стоимости ресурса здесь: /programming/579887/how-exорого-is-rtti
Любой полнофункциональный компилятор C ++ определенно будет поддерживать RTTI. Если вы хотите попробовать использовать стороннюю IDE (например, Eclipse с плагином Arduino), вы можете легко включить ее. Это, вероятно, не стоит хлопот только для этого, хотя.
Альтернатива
Более эффективным (но менее гибким) решением было бы использование подхода класса признаков. Это включает в себя некоторые интересные шаблоны мета-программирования:
Вы можете добавить
MAKE_TYPE_INFO(..)
строки для любого типа, который вы хотите, в том числе имена пользовательских классов. Затем вы можете использовать это так:Все, что вы не определили,
MAKE_TYPE_INFO(..)
будет отображаться как"unknown"
.Это довольно продвинутые вещи, поэтому я не буду пытаться объяснить, как все это работает здесь. В Интернете есть различные учебники по программированию шаблонов на C ++, если вам это интересно.
РЕДАКТИРОВАТЬ: Стоит отметить, что
typeof
оператор не является стандартным C ++, но поддерживается несколькими компиляторами, такими как GCC. Это в основном более старый эквивалентdecltype
, который появляется в стандарте C ++ 11.источник
Я использую простой глупый подход ...
Это концепция полиморфизма, когда создаются несколько функций с разными типами параметров, но с одинаковым именем функции . Во время выполнения будет вызвана функция, соответствующая правильному количеству аргументов и типам аргументов. Надеюсь, это объяснение поможет.
источник