Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KokosSPb
81 / 84 / 3
Регистрация: 03.02.2011
Сообщений: 468
#1

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

29.10.2012, 10:17. Просмотров 568. Ответов 7
Метки нет (Все метки)

Доброго времени суток.
Появился вопрос. Предположим есть 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=...")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2012, 10:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Превращение строки в название исполняемой функции (C++):

Имя и путь исполняемой программы - C++
1. Как получить полное имя (путь+имя+расширение) исполняемой программы? В Borland это было Application->ExeName, а как в Visual С++? 2....

Присвоить функции название - C++
Возможно ли на с++ реализовать такую конструкцию: somename = somefunc(){printf("Hello");}; int main() { somename; } ...

Уточните пожалуста название функции - C++
SimpleCat &TheFunction() //функция возвращяет ссылку на SimpleCat. { SimpleCat * pFrisky = new SimpleCat(5,9);//Если оператор new...

Выделить из строки название последнего каталога - C++
Дана строка, содержащая полное имя файла. Выделить из этой строки название последнего каталога (без символов \). Если файл содержится в...

Нужно дать название файлу из строки - C++
Есть строка S, создаю файл через ofstream... Как дать файлу название S? То есть, в идеале, должно получится вот так: void...

Выделить из строки название последнего каталога - C++
Привет всем, девушек с праздником! Вообщем к делу. Дана строка, содержащая полное имя файла. Выделить из этой строки название последнего...

7
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.10.2012, 10:30 #2
Цитата Сообщение от KokosSPb Посмотреть сообщение
Что написать в обработчике формы, чтоб при вводе в TextBox слова text1 или text2 он воспринимал их как названия функций и выполнял их. Без IF и CASE.
Классический C++ не поддерживает рефлексию. Так что без условий не обойтись
1
KokosSPb
81 / 84 / 3
Регистрация: 03.02.2011
Сообщений: 468
29.10.2012, 10:33  [ТС] #3
понятно... спасибо огромное... а жаль...
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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 нужно подставить тип ваших переменных или функций.
1
KokosSPb
81 / 84 / 3
Регистрация: 03.02.2011
Сообщений: 468
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 нужно подставить тип ваших переменных или функций.
Это ответ на какой вопрос? первый или второй?
0
soon
2542 / 1307 / 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;
}
Но это не рефлексия.
1
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.10.2012, 11:25 #7
Тебе надо по сути писать свой domain-specific language средствами C++.
И общение с ним будет идти в стиле env[ "functionName" ]->invoke( argumentList, ... );
Вариант, который тебе предложили - хранение указателей на функции в ассоциативном массиве, почти что вызов по имени в рантайме.
1
KokosSPb
81 / 84 / 3
Регистрация: 03.02.2011
Сообщений: 468
29.10.2012, 13:00  [ТС] #8
Всем спасибо, буду разбираться
0
29.10.2012, 13:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2012, 13:00
Привет! Вот еще темы с ответами:

Превращение буквы алфавита в соответствующую ей цифру в нем - C++
Доброе время суток! Была составлена программа на Delphi с такой вот задачей: Из текстового файла, состоящего из 6-7 строк, сформировать...

Вызов функции, название которой содержится в строке - C++
Здравствуйте. Смотрите, тут самый легкий вопрос: у меня есть функция Function, которая ничего не принимает и не возвращает. у меня...

Название функции как переменная во время компиляции. Возможно? - C++
Хочу что - то вроде: static const std::string FUNC_NAME = &quot;SuperFunc&quot;; //... void FUNC_NAME() { } То есть чтоб я где -...

Выделить из этой строки название первого каталога (без символов «\») - C++
Помогите написать программу на языке С++. Задание такое: Дана строка, содержащая полное имя файла. Выделить из этой строки название...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru