Имена переменных переменных c++

Проблема: я некоторое время искал здесь способ перебрать переменные с именами, похожими на variable_1, variable_2, ...., variable_n. По сути, я спрашиваю, есть ли способ сделать это с помощью цикла для достижения variable_i или, точнее, в моем случае, functionName_i.

Что мне нужно: я пытаюсь зациклить массив объектов для вызова различных функций, которые имеют последовательные имена и параллельны массиву объектов (например: obj[ i ]->callback_i() )

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

Возможные обходные пути. Все, о чем я думаю, восходит к созданию массива/вектора указателей на функции. Я мог бы заставить его в конечном итоге работать, если бы у меня действительно не было вариантов, но я просто подумал, что должен спросить из любопытства.

Четкий вопрос. Есть ли способ перебирать функции с последовательными именами, используя переменную int i как часть имен функций?

Спасибо!


person ThunderStruct    schedule 08.08.2015    source источник
comment
Нет. Используйте массив указателей на функции.   -  person rici    schedule 08.08.2015
comment
Чтобы сделать то, что вы хотите, потребуется использовать отражение, функцию, обычно не поддерживаемую в C.   -  person Kwarrtz    schedule 08.08.2015
comment
Вы можете сделать это в зависимости от вашей системы. Например, если вы работаете в Windows, вы можете поместить функции в блок extern "C" и экспортировать их с помощью __declspec(dllexport), а затем загрузить их по имени (используя строковое значение времени выполнения) в указатели функций с GetProcAddress. Я бы предположил, что вы можете сделать что-то подобное на Linux или Mac, но я не знаю, как это делается.   -  person Benjamin Lindley    schedule 08.08.2015
comment
Возможно, вы могли бы связать функции с именем среды выполнения, например, std::map<std::string, std::function<void()>>?   -  person Galik    schedule 08.08.2015
comment
@Galik Вы имеете в виду сохранить имя функции в качестве ключа и ее указатель в качестве значения? На самом деле, это неплохая идея... Он по-прежнему хранит указатель функций и все такое, но это такой изящный способ сделать это.   -  person ThunderStruct    schedule 08.08.2015
comment
@BenjaminLindley На самом деле это кажется правильной идеей. Это доставляет много хлопот, но это действительно отвечает на мой вопрос, поскольку отличается (и в некотором роде более прямым) от обходного пути, который я упомянул. Спасибо за отзыв!   -  person ThunderStruct    schedule 08.08.2015


Ответы (1)


No.

C++ обычно не хранит информацию о типе или имени переменной во время выполнения; если да, то он не переносим (typeid() зависит от компилятора) или просто невозможен. Вы не можете ссылаться на имя переменной во время выполнения, если только вы не создадите систему для подобных вещей или не используете отладочную информацию, которая не является стандартной функцией C++.

Этот тип отражения дорог и больше подходит для языков более высокого уровня. C++, как язык более низкого уровня, избавляется от сахара и просто говорит вам «нет».

Вы можете сделать такие вещи в C++, если вы создадите систему именования, но для обобщенной также потребуются варианты, версия идиомы NULL/Maybe, атрибуты, проверки, много отладки, и вы можете делать все это, если хотите, но здесь вы можете также переключиться на другой язык, который уже имеет ответ, который вы ищете, и привязать к нему C++.

В качестве альтернативы используйте матрицу или массив функций. Затем выполните итерацию по индексу.

person CinchBlue    schedule 08.08.2015