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

Сделать функцию "Команда" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Приложения для телефона http://www.cyberforum.ru/cpp-beginners/thread163289.html
Писать приложения для телефона можно только на Java? Просто я слышал, что можно писать на си++ приложения для телефона, это правда?
C++ Защита программы Требуется, чтобы программа работала в двух режимах: - Режим с ограничениями (демо) - Режим полной функциональности Методы регистрации программы пока что не интересуют. Думаю, как это лучше сделать, в голову пришла такая мысль. Создается специальный класс-защитник, в который инкапсулируется класс основной программы. В главной функции создается объект защитника и запускается. В методе... http://www.cyberforum.ru/cpp-beginners/thread163268.html
C++ Сеть и очередь структур
Всем привет. Пишу клиент-серверное приложение, в качестве пакета данных у меня 4 int числа, в виде структуры. struct message { int arg; }; Клиентская программа параллельным потоком принимает данные от сервера, каждая "порция" данных это одна структура message.
Получение времени года по введенному пользователем месяцу C++
Решить с помощью оператора Case. Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее название времени года. В случае, если пользователь укажет недопустимое число, программа должна вывести сообщение "Ошибка ввода данных". Ниже представлен рекомендуемый вид экрана во время работы программы.Введите номер месяца (число от 1 до 12) и нажмите <Enter> -> 11.
C++ Динамической вектор http://www.cyberforum.ru/cpp-beginners/thread163197.html
Створить параметризований тип, динамической вектор.Реализировать функциї: додаванние и удаление елементов, поиск максимального за сер. оценками, сортировка за фамилиеи. ===================== Клас студент Поля: фамилия, факультет, середня оценка. Удалить тех студентов, сер.оценка которих ниже как 3!! ===================== Проблема с вектором
C++ Как получить левую часть строки? С попощю такого куска кода я получу результат: erty , тоесть правая часть строки qwerty, а как мне получить левую часть строки например qwer? Спасибо! void main() { char buf="qwerty"; char str; memcpy(str,buf+2,sizeof(str)); printf("%s\n",str); } подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.09.2010, 18:18     Сделать функцию "Команда"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <map>
#include <string>
#include <iostream>
 
void f_begin() {
    std::cout << "call f_begin" << std::endl;
}
 
std::map <std::string, void (*)()> functions;
 
void init() {
    functions["BEGIN"] = f_begin;
}
 
void command(const char *cname) {
    functions[cname]();
}
 
int main()
{
    init();
    command("BEGIN");
}
Добавлено через 54 минуты
Вот быдолкод на Си
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
 
// Обработчик команды BEGIN
void f_begin() 
{
    printf("call f_begin\n");
}
 
// Максимальная длина имени команды
#define MAX_FNAME 32
 
// Максимальное количество обработчиков команды
#define MAX_NFUNC 32
 
// Тип указатель на функцию
typedef void (*fptr_t)(void);
 
// Структура КОМАНДА
typedef struct COMMAND 
{
    char name[MAX_FNAME];
    fptr_t ptr;
} command_t;
 
// Список команд
command_t functions[MAX_NFUNC] = 
{
    { "BEGIN", f_begin }
};
 
// Поиск обработчика по имени
int find_func(char *fname) 
{
    int i;
    
    for(i = 0; i < MAX_NFUNC; ++i)
        if(strcmp(functions[i].name, fname) == 0)
            return i;
            
    return -1;
}    
 
// Вызов обработчика по имени команды
void command(char *fname) 
{
    int i;
    
    if((i = find_func(fname)) == -1) {
        fprintf(stderr, "function not found\n");
        return;
    }
    
    functions[i].ptr();
}
 
int main()
{
    // YEAH!
    command("BEGIN");
}
Можно еще добавить управление списком команд: добавить команду, удалить команду и т.д. Список можно сделать динамическим.
Глубокий минус конечно в том, что все функции обработчики должны быть типа void и не принимать значений. На Си++ эту проблему в принципе можно решить с помощью шаблонов (учитывая что в грядущем стандарте должна появится поддержка шаблонов с переменным количеством аргументов).
 
Текущее время: 19:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru