Создать пространство имен из строки - PullRequest
0 голосов
/ 30 апреля 2018

Требуются функции в разных пространствах имен, пространство имен отражает разные версии данных, но все функции имеют одинаковую сигнатуру. Пожалуйста, смотрите пример

For version v_1_0 this function is needed   v_1_0::decoder::decoding( ... )
For version v_1_1 then this shall be called v_1_1::decoder::decoding( ... )

Я получаю строку версии откуда-то еще. Формат версии в точности соответствует пространству имен. Интересно, смог бы я сгенерировать вызов функции из строковой переменной пространства имен.

Причина, по которой я спрашиваю этот вопрос, состоит в том, что уже существует так много версий, и скоро они будут добавлены. Мне нужно создать длинный цикл if else или switch для вызова функции, которая очень раздражает

switch (version) {
    case v_1_0:
        v_1_0::decoder::decoding( ... )
        break;
    case v_1_1:
        v_1_1::decoder::decoding( ... )
        break;
     ....
    default:
        break;
    }

Было бы неплохо иметь что-то вроде

auto name_space = get_namespace( version );
name_space::decoding( ... )

1 Ответ

0 голосов
/ 30 апреля 2018

Это не может быть сделано. Имена пространств имен отбрасываются при компиляции программы.

Вы также не можете иметь переменную типа namespace. Если каждая версия была классом или экземпляром класса, вы могли бы создать функцию, которая возвращает соответствующий экземпляр, но это не относится к пространствам имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...