Не создал ли я то, что и до меня было создано? Есть ли альтернатива?
Создал класс который называется 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");
}
Да, первый вариант выглядит более деликатно, но он не всегда подходит.
Вопрос. Есть ли где-нибудь более профессиональная реализация такой штуки.