Форум программистов, компьютерный форум CyberForum.ru

Превращение строки в название исполняемой функции - C++

Восстановить пароль Регистрация
 
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
29.10.2012, 10:17     Превращение строки в название исполняемой функции #1
Доброго времени суток.
Появился вопрос. Предположим есть TextBox, кнопка и набор функций:
C++
1
2
3
4
5
6
void text1(){
this->Text="Абырвалг";
}
void text2(){
this->Text="Главрыба";
}
Что написать в обработчике формы, чтоб при вводе в TextBox слова text1 или text2 он воспринимал их как названия функций и выполнял их. Без IF и CASE.

Как пример, при работе с MySQL или SQL, CommandText меняется динамически, а обработчик можно один использовать.
или
При работе с PHP можно всегда вывести через echo тэги и они обработаются, как название текста.

и еще вопрос, как можно использовать такое-же динамическое создание пременных? ну или хотя-бы их использование. Думаю проблемы однотипны. (Имеется в виду, что у меня, к примеру, предположим, есть переменные a1,a2,a3 и они не в массиве, создаю цикл for и хочу заполнить эти переменные по принципу "ai=...")
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.10.2012, 10:30     Превращение строки в название исполняемой функции #2
Цитата Сообщение от KokosSPb Посмотреть сообщение
Что написать в обработчике формы, чтоб при вводе в TextBox слова text1 или text2 он воспринимал их как названия функций и выполнял их. Без IF и CASE.
Классический C++ не поддерживает рефлексию. Так что без условий не обойтись
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
29.10.2012, 10:33  [ТС]     Превращение строки в название исполняемой функции #3
понятно... спасибо огромное... а жаль...
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
29.10.2012, 10:55     Превращение строки в название исполняемой функции #4
C++
1
2
3
4
5
6
7
/////////////////////////////////////////////////////////////////////////////////////////
#include <map>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef std::map<T_str, T>  T_map;
/////////////////////////////////////////////////////////////////////////////////////////
Здесь вместо T нужно подставить тип ваших переменных или функций.
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
29.10.2012, 10:59  [ТС]     Превращение строки в название исполняемой функции #5
Цитата Сообщение от Mr.X Посмотреть сообщение
C++
1
2
3
4
5
6
7
/////////////////////////////////////////////////////////////////////////////////////////
#include <map>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef std::map<T_str, T>  T_map;
/////////////////////////////////////////////////////////////////////////////////////////
Здесь вместо T нужно подставить тип ваших переменных или функций.
Это ответ на какой вопрос? первый или второй?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.10.2012, 11:23     Превращение строки в название исполняемой функции #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <unordered_map>
#include <string>
#include <functional>
 
void foo()
{
    std::cout << "void foo()" << std::endl;
}
 
int bar()
{
    std::cout << "int bar()" << std::endl;
    return 42;
}
 
int baz(int)
{
    std::cout << "int baz(int)" << std::endl;
    return 42;
}
 
int main()
{
    std::unordered_map<std::string, std::function<void()>> m;
    m["foo"] = foo;
    m["bar"] = bar;
    // m["baz"] = baz;  //Error
    m["baz"] = std::bind(baz, 42);
 
    std::string str;
    std::cin >> str;
    try
    {
        m.at(str)();
    }
    catch(...)
    {
        std::cout << "Does not exists" << std::endl;
    }
    return 0;
}
Но это не рефлексия.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.10.2012, 11:25     Превращение строки в название исполняемой функции #7
Тебе надо по сути писать свой domain-specific language средствами C++.
И общение с ним будет идти в стиле env[ "functionName" ]->invoke( argumentList, ... );
Вариант, который тебе предложили - хранение указателей на функции в ассоциативном массиве, почти что вызов по имени в рантайме.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2012, 13:00     Превращение строки в название исполняемой функции
Еще ссылки по теме:

Превращение буквы алфавита в соответствующую ей цифру в нем C++
C++ Чтение из файла, название передано как параметры функции main argc & argv
C++ Название функции как переменная во время компиляции. Возможно?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
29.10.2012, 13:00  [ТС]     Превращение строки в название исполняемой функции #8
Всем спасибо, буду разбираться
Yandex
Объявления
29.10.2012, 13:00     Превращение строки в название исполняемой функции
Ответ Создать тему
Опции темы

Текущее время: 03:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru