Я пытался упростить функцию шаблона, используя псевдоним шаблона вместо базового типа:
template<typename T,
typename Traits = std::char_traits<T>,
typename Allocator = std::allocator<T>,
typename String = std::basic_string<T, Traits, Allocator>,
typename Vector = std::vector<String>>
Vector make_vector_from_string(const String & str)
{
//do something with str parameter
return Vector{
{str}
};
}
Но вызывающая сторона должна указать тип шаблона, поскольку компилятор не может определить T для параметр:
std::string bar{"bar"};
auto strings{make_vector_from_string<char>(bar)};
Если тип функционального параметра изменяется на std::basic_string<T, Traits, Allocator>
вместо String
, вызывающий абонент может просто вызвать make_vector_from_string(bar);
без указания параметра шаблона. Почему это?