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

Статический хеш или switch-case/if-else для выбора - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Инициализация двумерного динамического массива http://www.cyberforum.ru/cpp-beginners/thread1852879.html
Как задать численные значения элементам двумерного динамического массива при его инициализации? int n=2; double **a; a = new double *; for(int i = 0; i < n; ++i) a= new double ; a= 1;a= 1; a= 1;a= 1;
C++ Дана матрица размера M × N. Поменять местами строки, содержащие минимальный и максимальный элементы матрицы Я написал программу меняющую максимальный и минимальный элемент местами, но поменять строчки в которых они содержатся не получается #include "stdafx.h" #include <iostream> #include <math.h> #include <conio.h> #include <cmath> #include <iomanip> using namespace std; int main() http://www.cyberforum.ru/cpp-beginners/thread1852871.html
C++ Как сделать свой контейнер совместимым с std::allocator?
Как сделать свой контейнер совместимым с std::allocator?
Создайте функцию, вычисляющую количество вхождений символа «А» в заданный массив символов длины N C++
Создайте функцию, вычисляющую количество вхождений символа «А» в заданный массив символов длины N. Исходный массив задавать динамически, заполнять случайными буквами. Написать подпрограмму, выполняющую расчеты в соответствии со своим вариантом индивидуального задания. Выполнение задания реализовать с использованием массива соответствующего типа и размера. 2. Реализовать вызов функции из...
C++ Последовательности значений http://www.cyberforum.ru/cpp-beginners/thread1852852.html
Выполнить задание без хранения последовательности значений. нужно написать программу с помощью циклов. И, если можно с объяснениями. Условие: Вводится последовательность из n целых чисел. Определить количество элементов в наиболее длинной подпоследовательности подряд идущих чисел, представляющих собой геометрическую прогрессию.
C++ Найти простые числа с суммой цифр меньше заданного числа нужно написать прогу, можно использовать только циклы. Если можно, с объяснениями. Условие: Найти n первых простых чисел, сумма цифр у которых меньше заданного m. подробнее

Показать сообщение отдельно
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605

Статический хеш или switch-case/if-else для выбора - C++

17.11.2016, 11:00. Просмотров 142. Ответов 4
Метки (Все метки)

Добрый день.
Положим есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void parseByType(const QString &data, const QString &type)
{
    if(type == "integer")
    {
        IntegerHandler handler(data);
        handler->parse();
    }
    else if(type == "boolean")
    {
        BooleanHandler handler(data);
        handler->parse();
    }
    else if(type == "string")
    {
        StringHandler handler(data);
        handler->parse();
    }
    else
    {
        // ошибка
    }
}
Некая функция для парсинга текста...
Её можно переписать, например, вот так:
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
template<typename T>
BaseHandler* createHandler(const QString &data)
{
    return new T(data);
}
 
static const QHash<QString, BaseHandler* (*)(const QString&)> handlers = {
    {"integer", createHandler<IntegerHandler>},
    {"boolean", createHandler<BooleanHandler>},
    {"string", createHandler<StringHandler>},
};
 
void parseByType(const QString &data, const QString &type)
{
    BaseHandler *handler = handlers.at(type, nullptr);
    if(handler == nullptr)
    {
        // ошибка
    }
    else 
    {
        handler(data);
        handler->parse(); // виртуальный метод
    }
}
Вопрос опытным: как следовало бы обрабатывать такие ситуации? Использовать конструкции switch-case/if-else для выбора нужного типа или статический хеш?
Может быть вообще как-то по-другому?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru