У меня есть шаблонная функция, которая генерирует объекты в соответствии с типом T
своего аргумента. Похоже
template<typename T>
container<T> foo(T t)
{
return container<T> { item<T>{t} };
}
где container
- это класс шаблона, который содержит другой класс шаблона item
.
Я реализовал operator+
для container<T>
, чтобы контейнеры с одинаковыми базовыми типами T
могли складываться.
Теперь я хочу, чтобы следующая строка работала
auto sum = foo("abc") + foo(std::string("def")); // type mismatch
Другими словами, я хочу, чтобы foo
генерировал container<const char *>
всякий раз, когда он видит std::string
, или наоборот.
Конечно, я могу явно перегрузить foo
как
container<const char *> foo(std::string str)
{
return container<const char *> { item<const char *> { str.c_str() } };
}
Но у меня так много функций, как foo
, что я действительно не хочу писать перегруженную версию для каждой из них.
Это открытый вопрос дизайна. Любое решение, предложение или обходной путь приветствуются и приветствуются. Большое спасибо.