Перебор в цикле функций с похожими именами

260
19 декабря 2016, 19:45

Имеется куча функций

int func001();
int func002();
...
int func015();
...
int func123();

Как их всех можно перебрать в цикле?
Как вызвать функцию зная ее номер?

P.S. Убрал не работающий код.

Answer 1

@VladD, опять комментарии кончились, причем предыдущий удалил (хорошо, что скопировал), а новый не дает создать. Пришлось в ответе набивать...

Это однозначно надо решать, создавая shared library (.so или .dll в винде).

Делаете такую библиотеку. main при запуске подгружает ее и вызывает функции по имени, в зависимости от номера задачи.

--

Конечно, можно генерить исходник main-а по шаблону каждый раз.

Но, IMHO с загружаемой библиотекой (или несколькими) и файлом конфигурации к ним, описывающим аргументы-результат (предполагая некое развитие задачки) просто красивей.

Answer 2

Создайте массив указателей на ваши функции, и вызывайте функции при проходе по массиву.

Но честно говоря очень, оочень странная задача как для C++.

UPD

Еще вариант: написать скрипт на Perl который сгенерит большой source file с вызовом всех этих функций.

Answer 3

Как-то так.

#include <map>
void func1();
void func2();
int main()
{
     std::map<int, func_t> funcs;
     funcs.insert(std::make_pair(1, &func1));
     funcs.insert(std::make_pair(2, &func2));
     for(std::map<int, func_t>::iterator i = funcs.begin(); i != funcs.end(); i++) {
     { 
         i->second(/*аргументы*/);
     }
}
READ ALSO
Стоит ли использовать Qt C++?

Стоит ли использовать Qt C++?

Всем привет, около месяца пишу на C++ и вот появилась мысль попробовать Qt, тем более он кроссплатформенный

244
Как указать связи между указателями и исходными данными?

Как указать связи между указателями и исходными данными?

При сериализации в boost::serialization можно записать вектор std::vector<int> base;

261
Произвольное чтение из файла

Произвольное чтение из файла

Например есть файл размером 1ГБ, как получить участок данных из него находящиеся где то посередине не читая его полностью

280