2013-06-18 4 views
1

Мне нужно вызвать член определенного (общедоступного) класса через локальную переменную, и мне интересно, как я могу это сделать. Моя проблема заключается в том, что какая переменная для вызова в классе зависит от серии значений, поэтому мне действительно нужно использовать переменную, чтобы вызывать ее, а не объяснять ее имя. Например:C++ Доступ к общедоступным членам класса с переменной

У меня есть класс Предположения со многими переменными-членами (все из них представляют собой тип double). Так скажем, у меня есть пять потенциальных переменных, которые я хочу, чтобы позвонить в допущениях, но только один из них:

  1. VariableStem_One
  2. VariableStem_Two
  3. VariableStem_Three
  4. VariableStem_Four
  5. VariableStem_Five

В моем коде в настоящее время создается строка, содержимое которой соответствует одному из пяти терминов выше - теперь мне просто нужно вызов этой переменной-члена - могу ли я сделать это косвенно? Таким образом, у меня есть одна переменная «VariableKey» содержимое которого равен одному из пяти переменных выше - я хочу сделать следующий вызов:

Assumptions.VariableKey

Но есть VariableKey interpretated как косвенной ссылки.

Это также абстракция/упрощение моей реальной проблемы - количество возможных значений больше похоже на 75, поэтому я хочу избежать кодирования каждой переменной, если это возможно.

Заранее благодарен!

+1

Что вы подразумеваете под названием переменной? Вы имеете в виду вызов определенной функции на основе значения переменной? Не могли бы вы - вместо использования строки - использовать указатель на функцию - и выбрать соответствующую функцию таким образом? В качестве альтернативы, можете ли вы сопоставить строки с функциями? Будет ли это жизнеспособным решением? Знаете ли вы весь спектр функций перед рукой? Возможно, какой-то пример кода поможет. –

ответ

2

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

Вы также можете создать карту, которая отображает строки в определенное значение, но это может добавить дополнительные накладные расходы.

+0

Спасибо за объяснение - это очень полезно. К сожалению, он делает больше работы для меня, но отлично знает ответ :) – brentf

0

То, что вы пытаетесь сделать, называется "reflection", а у C++ нет встроенной поддержки; вы можете посмотреть на добавление его через library, но было бы проще просто поместить переменные-члены «Stem» в строку , чтобы вместо этого удвоить.

+0

Опять же, весьма полезно - спасибо. – brentf

0

Вы должны добавить метод выбора в классе Успения, взяв ключ в качестве входного сигнала.