Использование ввода для вызова функции-члена - PullRequest
0 голосов
/ 26 февраля 2010

Можно ли использовать Input для вызова функции-члена?

void one()
{
}

cout << "enter input:" << endl;
cin >> input;  //where input is "one"

instance.input()

Ответы [ 3 ]

2 голосов
/ 26 февраля 2010

Если все ваши методы имеют одинаковое количество аргументов (или, желательно, без аргументов), вы можете легко сделать это, используя std :: map.

Используйте имя метода в качестве ключа карты, используйте указатель на метод в качестве значения на карте. Затем найдите введенную строку на карте и выполните соответствующий метод с помощью указателя метода.

Будьте осторожны с нестатическими методами. Указатели на функции и указатели на статические методы довольно просты, но нестатические указатели на методы немного сложнее. См. http://www.goingware.com/tips/member-pointers.html для получения дополнительной информации.

0 голосов
/ 26 февраля 2010

Похоже на работу для переводчика и Command pattern.

0 голосов
/ 26 февраля 2010

Нет, вы не можете - потому что input не является lvalue .

...