int id = 0;
commands.append({ id++, "test", &MyClass::test });
commands.append({ id++, "test1", &MyClass::test1 });
commands.append({ id++, "test2", &MyClass::test2 });
При этом MyClass - это класс, в котором это всё и живёт. Можно как то избавиться от использования MyClass в структуре и заполнении? Просто так ведь заменить MyClass на this не получится. Или получится?
Мудрость приходит с возрастом.
Иногда возраст приходит один. Эхо разума
Русский язык - он велик и могуч. Ну и "мысль изречённая есть ложь".
Имелось в виду, что всё - инициализация структуры и использование оной находятся внутри класса MyClass. Т.е. других классов нет.
И, если в самой структуре я могу написать
bool (*func)(void);
то вот с присваиванием будет проблема.
Мудрость приходит с возрастом.
Иногда возраст приходит один. Эхо разума
Вроде же можно объявлять методы в структуре и не мучаться с указателями на методы.
Можно. Но тогда, фактически, надо будет весь класс в структуру перенести. А зачем?
Логика в том, что я описываю класс с, например, 10 однотипными функциями (все возвращают bool и не имеют входных параметров). Затем создаю и заполняю ту структуру, которую и приводил выше. А дальше использую функции, используя данные из структуры. Например, если делать меню или выпадающий список для выбора этих функций. Получается нагляднее, компактнее и удобнее, на мой взгляд. Единственное, что коробит мой глаз - это 10 упоминаний &MyClass::testX в заполнении структуры. Но, похоже, по другому никак.
Мудрость приходит с возрастом.
Иногда возраст приходит один. Эхо разума
Можно. Но тогда, фактически, надо будет весь класс в структуру перенести. А зачем?
Да как бы незачем, просто в структуре создаётся указатель типа MyClass, и в каждую структуру делается ссылка на this, а вызывать уже можно будет любую функцию.
Объявление:
ormorph, в вашем примере функция func - это всего 1 строка. А теперь представьте, что таких функций будет 10, строк по 50 в каждой. Решение так себе...
Макрос - это всего лишь запутывание кода и усложнение отладки. Да и короче то ведь не будет.
P.S. Проблема ведь не столько в том, как это записать в структуру, а в том, как это "красивее" вызвать потом.
Мудрость приходит с возрастом.
Иногда возраст приходит один. Эхо разума
ormorph, в вашем примере функция func - это всего 1 строка. А теперь представьте, что таких функций будет 10, строк по 50 в каждой. Решение так себе...
Ну мне если честно, трудно вообще понять смысл вызова функции класса из структуры и какие оно может дать приемущества. А так на пример функция func может считывать id из структуры и на основании значения вызывать соответствующую функцию из класса(используя указатель). Все это можно оформить switch. Так что ни чего лишнего и особо сложного не потребуется.
ormorph, в вашем случае просто сложнее получается, как по мне. Раньше я именно так и делал. А теперь я просто пишу функции в классе и заполняю свою структуру (как в первом посте). А потом, когда надо, например, вызвать какую то функцию, я просто ищу нужный индекс в структуре, нахожу там указатель на функцию и запускаю её. Фактически, даже переключатель не всегда нужен.
Хотя, на вкус и цвет все фломастеры разные, тут не спорю.
Не то чтобы можно, и не то чтобы надо, просто структура и класс — это в плюсах синонимы. Если смотреть на всё как на классы, может оказаться проще жить. В частности, можно наследовать методы вместо извращения с использованием методов другого класса.
В частности, можно наследовать методы вместо извращения с использованием методов другого класса.
Можно. Вот только у меня это один и тот же класс. Даже в описании структуры он один. И я думал, что можно как то хитро дать понять компилятору, что в моём случае, в указателе нет особой надобности указывать класс... а на деле получается, что надо.
Мудрость приходит с возрастом.
Иногда возраст приходит один. Эхо разума