Получение типа переменной
- Войдите на сайт для отправки комментариев
Всем привет! У меня возникла задача, решить которую я не смог. Сюда ли я обратился, то что пишу код в PlatformIO IDE для Arduino Mega? Задача состояла в определении типа переменной в аргументе метода класса. Если, например, аргумент был типом int16_t, то подставлялась бы переменная-член класса такого же типа и аргумент копировался бы в эту переменную. Ну и соответственно с другими типами. Искал в интернете примеры, нашёл решение через typeid:
C++Выделить код | ||
|
но при компиляции выдавало ошибку, что "необходимо включить ключевое слово <typeinfo> перед использованием typeid". Как добавить и куда это слово, пробовал по всякому методом "тыка" результата не дал.
Пробовал подключить файл так, #include <typeinfo.h>, на что мне PlatformIO выдавало ошибку невозможности найти такой файл.
Также выскакивает ошибка "cannot use typeid with -fno-rtti"
Кто чем поможет...?
забудь про typeid на этой платформе.
Не знаю насчёт typeid, но во всех встреченных мною библиотеках, для этого используются разные функции.
Т.е. отдельная функция для int, отдельная для byte и тд
Программа сама смотрит тип данных и вызывает нужную функцию.
забудь про typeid на этой платформе.
Ну а чем тогда проверять тип?
Что за разные функции, подскажи.
Ну а чем тогда проверять тип?
Не тупи. Ты примерно представляешь себе, что такое RTTI? Если нет, то загугли, а потом спроси себя, как это втиснуть в контроллер.
Что за разные функции, подскажи.
это называется "перегрузка методов". Читайте в любом учебнике по С/С++
Если коротко - то для каждого возможного типа аргумента ты пишешь отдельный метод класса с одним и тем же названием. А компилятор при компиляции выберет нужный в зависмости от типа аргумента
Что за разные функции, подскажи.
используй шаблоны, Люк.
Пример
в строке 16 вызовется первая функция, потому что аргументы целые, а в строке 18 - вторая
забудь про typeid на этой платформе.
Ну а чем тогда проверять тип?
А его и не нужно проверять.
По крайней мере, в процессе выполнения.
А в процессе компиляции - пусть проверяет компилятор.
Вот тут еще можно почитать. В том числе про разрешение перегрузки аргументами близких типов.
https://habr.com/ru/post/487920/
Вот тут еще можно почитать. В том числе про разрешение перегрузки аргументами близких типов.
https://habr.com/ru/post/487920/
Лучше тут:
https://ravesli.com/urok-102-peregruzka-funktsij/
По вашей ссылке описано для тех, кто уже в этом не нуждается
Спасибо, товарищи, за направление моих действий. буду пробовать.