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

Идеи реализации класса Menu - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Инфиксная форма записи выражения http://www.cyberforum.ru/cpp-beginners/thread1776052.html
В файле задано выражение в инфиксной форме записи. В выражении могут быть целые положительные числа, знаки операций(*/+-), скобки. Написать программу, сохраняющую считанное выражение в двоичном...
C++ Не работает замена символов в файле на нижний регистр Почему не работает код? По идее должен символы в файле заменить на нижний регистр. int main() { string way = "Example.txt"; fstream text; text.open(way, ios_base::in | ios_base::out);... http://www.cyberforum.ru/cpp-beginners/thread1776050.html
C++ Локальные имена для файла
Локальные имена для файла, те которые объявлены как static или в безымянном namespace почему то доступны в другом файле. Почему это так или как это правильно тогда использовать?#ifndef HEADER_H...
Скрипт для запуска служб C++
Добрый день, Форумчане! За ранее извиняюсь, если пишу не в той теме, ибо не знал куда и пристроиться. Столкнулся с необходимостью написания скрипта, для проверки работы определённых служб, а в...
C++ Напечатать слова последовательности, которые отличны от последнего слова http://www.cyberforum.ru/cpp-beginners/thread1775971.html
Здравствуйте! Мне нужна помощь с заданием. Я не могу вывести на экран слово отличное от последнего, а так же при максимальной последовательности учитывается точка. А так же иногда не учитывается...
C++ Получить таблицу температур используя список Данную программу я написал работает верно, но как её можно реализовать с помощью списка, помогите пожалуйста #include <stdio.h> #include <conio.h> void main () { float c,f; float... подробнее

Показать сообщение отдельно
GbaLog-
Любитель чаепитий
2768 / 1290 / 311
Регистрация: 24.08.2014
Сообщений: 4,569
Записей в блоге: 1
Завершенные тесты: 2

Идеи реализации класса Menu - C++

05.07.2016, 13:58. Просмотров 354. Ответов 8
Метки (Все метки)

Добрый день. В общем хочу разработать шаблонный класс Menu, чтобы постоянно не писать switch{}, но не знаю, как лучше сделать, суть в том, что есть несколько вариантов, а какой лучше и легче по реализации я понять не могу.
1. Сделать класс Menu_item, в котором будет содержаться строка(название пункта меню) и функция, которую надо вызвать при выборе этого пункта.
Примерно:
Кликните здесь для просмотра всего текста

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
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
template<class T>
class Menu_item
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Menu_item
            (
                std::string name_item,
                T func
            )
            :
            name(name_item),
            func(func)
    {}
    //-----------------------------------------------------------------------------------
    template<class... Args>
    void operator()(Args... arg)
    {
        func(arg...);
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    T func;
    std::string name;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
void func(int a, int b)
{
    std::cout << a + b << std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    Menu_item<void(*)(int,int)> m{"asd",func};
    m(1,4);
}

2. Сделать тоже самое, только с std::function<>
Кликните здесь для просмотра всего текста

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
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <functional>
/////////////////////////////////////////////////////////////////////////////////////////
template<class T>
class Menu_item
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    Menu_item
            (
                std::string name_item,
                std::function<T> func
            )
            :
            name(name_item),
            func(func)
    {}
    //-----------------------------------------------------------------------------------
    template<class... Args>
    void operator()(Args... arg)
    {
        func(arg...);
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    std::function<T> func;
    std::string name;
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
void func(int a, int b)
{
    std::cout << a + b << std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    Menu_item<void(int,int)> m{"asd",func};
    m(1,4);
}

3. Сделать всё в одном классе, без всяких итемов и прочего.

Это лишь мои варианты. Если у вас есть свои варианты или дополнение к моим, то пишите, так же буду рад любым советам по теме.

Ещё хотелось бы сделать так, чтобы при надобности совать меню в меню.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru