Не создал ли я то, что и до меня было создано? Есть ли альтернатива?

Создал класс который называется TypePairs. В чем идея.
Создавая объект класса TypePair мы указываем пары ключ-значение. Далее по ключу мы можем получить значение (или по индексу пары). В качестве ключа и значения здесь типы данных.

auto tp = makeTypePairs(std::string(), std::regex(), int(), bool(true), std::wstring(), std::wregex(L"Hello World!"));

tp.getPair<int>()->getValue();            // return bool(true)
tp.getPair<std::wstring>()->getValue();   // return std::wregex(L"Hello World!")
tp.getPair<std::string>()->getValue();    // return std::regex()

tp.getPairByIndex<1>()->getValue();       // return bool(true)

Это может пригодится например в такой ситуации

// Вариант 1
template<class T>
void foo1(std::basic_string<T> str)
{
    std::basic_regex<T> r(str);
    ...
}

// Вариант 2
template<class T>
void foo2(T str)
{
    auto ur = ONF::makeTypePairs(std::string(), std::regex(), std::wstring(), std::wregex());
    auto r = ur.getPairValueType<T>(str);
    ...
}

int main()
{
    // Вариант 1
    foo1<char>("Hello");
    foo1<wchar_t>(L"Hello");

    // Вариант 2
    foo1<std::string>("Hello");
    foo1<std::wstring>(L"Hello");
}

Да, первый вариант выглядит более деликатно, но он не всегда подходит.
Вопрос. Есть ли где-нибудь более профессиональная реализация такой штуки.


Ответы (0 шт):