Вызов процедуры по числу
- Войдите на сайт для отправки комментариев
Пт, 22/06/2018 - 12:28
Здравствуйте, уважаемые.
Вопрос наверно глупый, но тем не менее
Возможно ли организовать вызов определённых процедур имея в наличии их имена?
Например у меня есть какой-то массив или строка в которой перечислены имена определённых процедур из программы. Можно ли имея это как-то вызвать эти процедуры в определённой последовательности?
Т е. грубо говоря автоматизировать их выбор чтобы он происходил в процессе работы программы?
соседняя тема. читай.
http://arduino.ru/forum/programmirovanie/refleksiya-v-si-ili-vyzov-funkt...
Можно.
Если хотите продробности, сначала давайте их сами: функции все одинаковые (по типу возвращаемого значения и типам и количеству параметров), или разные?
Была идея таким способом реализовать графическое меню на сенсорном экране, когда при переходе на какой-то экран мы вызывали бы набор процедур, которые описывают элементы этого экрана(кнопки, показатели, заголовки)
Этот набор понятное дело константа для каждого экрана.
Можно наверно через switch это реализовать или ещё как-то, но такой вариант в голову пришёл первым. Вроде как в теории выглядит красиво
Была идея таким способом реализовать графическое меню на сенсорном экране, когда при переходе на какой-то экран мы вызывали бы набор процедур, которые описывают элементы этого экрана(кнопки, показатели, заголовки)
Этот набор понятное дело константа для каждого экрана.
Можно наверно через switch это реализовать или ещё как-то, но такой вариант в голову пришёл первым. Вроде как в теории выглядит красиво
А что, на мой вопрос ответа не будет?
И, да, я вот что-то не пойму, госдума чтоли новый закон приняла - вызывать функции по именам? Годами такая тема не всплывала, а тут две одновременно - вот вторая http://arduino.ru/forum/programmirovanie/refleksiya-v-si-ili-vyzov-funktsii-po-imeni-v-peremennoi
Одинаковые
Ну, тогда пихайте их (функции) в массив и вызывайте по индексу. В чём проблема то?
И, да, я вот что-то не пойму, госдума чтоли новый закон приняла - вызывать функции по именам? Годами такая тема не всплывала, а тут две одновременно - вот вторая http://arduino.ru/forum/programmirovanie/refleksiya-v-si-ili-vyzov-funktsii-po-imeni-v-peremennoi
Говорят гениальные идеи сразу нескольким людям приходят:)
Ну, тогда пихайте их (функции) в массив и вызывайте по индексу. В чём проблема то?
А можете подсказать как это сделать или где посмотреть?
Я так до этого с ними не обращался
А можете подсказать где можно подсмотреть реализацию подобного иначе?
Видел несколько примеров реализации многоуровневого меню, но все они работали на текстовых экранах, да и интересного вроде там для себя не увидел. (может смотрел не там..)
А можете подсказать где можно подсмотреть реализацию подобного иначе?
Ну, если речь о вызове функций по индексу, то просто в лоб.
// // Имеем 100500 одинаковых по параметрам и // возвращаемому значению функций // long _sum(const int a, const int b) { return a + b; } long _diff(const int a, const int b) { return a - b; } long _mul(const int a, const int b) { return a * b; } long _div(const int a, const int b) { return a / b; } // // Опимсываем тип данных: указатель на функцию // с нужными параметрами и возвращаемым типом // typedef long (* TFunc)(const int, const int); // // Пихаем все наши 100500 функций в массив // TFunc allFs[] = {_sum, _diff, _mul, _div }; void setup(void) { Serial.begin(57600); // // Вызываем функции по индексу в массиве // Serial.println(allFs[0](9, 6)); Serial.println(allFs[1](9, 6)); Serial.println(allFs[2](9, 6)); Serial.println(allFs[3](9, 6)); } void loop(void) {}А можете подсказать где можно подсмотреть реализацию подобного иначе?
Ну, делайте так, как Вам комфортнее. В согласии со своим уровнем подготовки и пониманием ситуации. Меню вообще-то делается через древовидную структуру объектов, но так делают профессионалы. Если Вы не профессиональный программист (и не хотите им становиться), то и не дёргайтесь
А можете подсказать где можно подсмотреть реализацию подобного иначе?
Ну, если речь о вызове функций по индексу, то просто в лоб.
// // Имеем 100500 одинаковых по параметрам и // возвращаемому значению функций // long _sum(const int a, const int b) { return a + b; } long _diff(const int a, const int b) { return a - b; } long _mul(const int a, const int b) { return a * b; } long _div(const int a, const int b) { return a / b; } // // Опимсываем тип данных: указатель на функцию // с нужными параметрами и возвращаемым типом // typedef long (* TFunc)(const int, const int); // // Пихаем все наши 100500 функций в массив // TFunc allFs[] = {_sum, _diff, _mul, _div }; void setup(void) { Serial.begin(57600); // // Вызываем функции по индексу в массиве // Serial.println(allFs[0](9, 6)); Serial.println(allFs[1](9, 6)); Serial.println(allFs[2](9, 6)); Serial.println(allFs[3](9, 6)); } void loop(void) {}А можете подсказать где можно подсмотреть реализацию подобного иначе?
Ну, делайте так, как Вам комфортнее. В согласии со своим уровнем подготовки и пониманием ситуации. Меню вообще-то делается через древовидную структуру объектов, но так делают профессионалы. Если Вы не профессиональный программист (и не хотите им становиться), то и не дёргайтесь
Спасибо, буду пробовать
https://www.arduino.cc/reference/en/language/structure/control-structure...