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

Какой паттерн подойдет, чтобы избежать длинных ветвлений? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не инициализируются структуры без конструктора http://www.cyberforum.ru/cpp/thread1780893.html
Доброго времени суток. Прошу объяснить следующий момент) struct vert { vert(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {} float x, y, z; }; int main() { vert* vertices = new vert
C++ Функция с типом char, которая должна возвращать интовое значение Всем привет. Странное дело. Есть функция с типом char, которая должна возвращать интовое значение в виде площади квадрата (так по заданию нужно). написал следующий код: #include <iostream> using namespace std; char ArOfShp (int); void main () { int sqsd; cout << "Enter square side: "; cin >> sqsd; http://www.cyberforum.ru/cpp/thread1780888.html
Проинциализировать и использовать массив указателей на функции C++
Пытаюсь проинциализировать и использовать массив указателей на функции. Компилятор упорно выдает ошибку, даже если следовать многочисленным примерам в интернете и книгах: myclass.h void a(); void b(); void c(); void (*funPtrsArray)() = {a, b, c};//ошибка "a brace-enclosed initializer is not allowed here before '{' token" //ISO C++ forbids...
Как закрыть поток после вызова detach()? C++
Всем здрасьте ! С join всё понятно, программа ждёт, когда завершится этот поток. Допустим я вызвал метод detach, как мне поток закрыть ? void My() { // actions
C++ WinAPI Как выключить монитор программно? http://www.cyberforum.ru/cpp/thread1780852.html
Имеется 2 противоположных вопроса: * Как выключить монитор програмно? При этом должно остаться срабатывание на мышь и клаву. * Как не дать таймеру сработать пока работает приложение?
C++ Что делает Thread::joinable? Всем здрасьте ! Объясните мне, пожалуйста, что именно делает этот метод и как может мне помочь ? std::thread::joinable подробнее

Показать сообщение отдельно
DrOffset
6787 / 3998 / 917
Регистрация: 30.01.2014
Сообщений: 6,818
15.07.2016, 00:32     Какой паттерн подойдет, чтобы избежать длинных ветвлений?
Ну или (если уж от интового ключа никак не избавиться) как-то так:
В принципе и без 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
class CTest
    : public CTest_base
{
public:
    CTest() : a() {}
    ~CTest() noexcept {}
    //something else
    void set()
    {
        a(vec);
    }
    void set_a(int key)
    {
        static void ( * op[])(std::vector<int> &) =
        {
             [](std::vector<int> & vec) {  vec.emplace_back(0); }
           , [](std::vector<int> & vec) {  vec.resize(5); }
           , [](std::vector<int> & vec) {  vec.clear(); }
           , [](std::vector<int> & vec) {  vec.shrink_to_fit(); }
        };
        a = op[key];
    }
 
private:
    void(* a)(std::vector<int> &);
};


Добавлено через 7 минут
Цитата Сообщение от tapochka Посмотреть сообщение
жаль только еще более элегантных решений нету
Да есть. Просто задача непонятная, допуски на задачу непонятные.
Универсального решения - да, нету. Но это всем известно.

Насчет:
Цитата Сообщение от tapochka Посмотреть сообщение
вот думал что-то типа tag-dispatching.
Посмотри-ка boost::variant и его static_visitor.
И вот сюда глянь: https://stackoverflow.com/questions/...late-functions
 
Текущее время: 16:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru