1

基になる型の代わりにテンプレート エイリアスを使用して、テンプレート関数を単純化しようとしていました。

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);何故ですか?

4

1 に答える 1