Передача разных типов данных в функцию
- Войдите на сайт для отправки комментариев
Втр, 04/03/2014 - 16:35
Здравствуйте коллеги !
Есть следующий код
void setup() { Serial.begin(9600); test("АБВГД"); int a = 100; test(String(a)); } void test(String str) { int s = 0; while(str[s] != 0) { if (byte(str[s]) != 208 && byte(str[s]) != 209) { Serial.println(byte(str[s])); } ++s; } } void loop() { }
Хотелось бы избавиться от записи test(String(a)); заменив на test(a) (а - типа integeg, byte). Для этого необходимо в функции test(String str) как то детектировать какой тип переменно ей передается. КАк это можно сделать.
В идеале - функции test(String str) скармливаем переменные любых типов, а она сама принемает решение, как их выводить, в зависимости от типа данных.
Как вариант, добавить еще одну функцию:
Вы пытаетесь обмануть компилятор. Допустим такую конструкцию можно придумать. Мне правда, очень интнресно - по какому признаку вы предполагаете отличать одни данные от других, находясь внутри подпрограммы?. В ооп это просто, у объектов там есть поля: класс объекта. А как тут, с простейшими днными. Обратите внимание, при передачие стринга в serial.print приходится указывать размер данных либо терминировать их нулем. Как вы думаете почему так ?
Возможно :)
На самом деле такая идея возникла на фоне Serial.Print (http://arduino.ru/Reference/Serial/Print) и lcd.print (http://arduino.cc/en/Reference/LiquidCrystalPrint#.UxYfDx-RiVI).
Как это реализовано ?
Я попытался отследить как вызывается lcd.print, но не получилось.
это выдернуто из библиотеки LiquidCrystal. Подскажите, где можно найти реализацию этого решения в библиотеке...
Возможно :)
НЕВОЗМОЖНО
это не одна и та же функция с разными аргументами, это разные функции с одинаковыми именами, и называется это перегрузкой функций
почитайте http://www.programmersclub.ru/13/
Так это то что надо. Получается, если я создам несколько функций с разными типами передаваемых в функции переменных, при этом с одинаковым названием, то все это будет работать ? Надо проверить :)
Проверил, Работает :)
Только не понятно зачем это вам ? Поделитесь - какая была цель, а то мне иногда то же хочется поюзать подобное, но никак цель не могу придумать :)
У меня есть дисплей от мотороллы C205 (он же от t190, t191, с200). Хочется выводить на него инфу, просто написав "lcd_print(что то , что нужно вывести на дисплей)", не задумываясь какие типы данных я на него передаю. (по аналогии с библиотекой LiquidCrystal). Я понимаю что это не совсем рационально, с точки зрения ресурсов МК, но для отладки взаимодействия с пользователей через экран так проще.
+ хочу понять как это в LiquidCrystal организовано, так как самой функции print нет, есть только ссылка на клас.
Хочется выводить на него инфу, просто написав "lcd_print(что то , что нужно вывести на дисплей)", не задумываясь какие типы данных я на него передаю.
... а потом кончится память
А чем не устраивает lcd.print из библиотеки жидких кристаллов ?
"lcd.print из библиотеки жидких кристаллов ?" - это из бибилиотеки :) Если кто нить подскажет как это прикрутить к моей функции, то устроит :)