我怎样才能创建一个像这样的函数?我似乎无法正确声明返回类型。
template <typename C, typename T0, typename T1>
typename C<T1>
convert_container(const C<T0>& container, T1 value) {
C<T1> new_container;
// Do some stuff...
return new_container;
}
std::vector<int> vec0;
const auto& vec1 = convert_container(vec0, float(2.0f)); // Produce a vector of floats
std::list<int> lst0;
const auto& lst1 = convert_container(lst0, float(2.0f)); // Produce a list of floats
最佳答案
正确的做法是使用template模板参数:
C++11:
template <template<typename...> class C, typename T0, typename T1> C<T1> convert_container(const C<T0>& container, T1 value) { C<T1> new_container; // Do some stuff... return new_container; }
C++03(带分配器重新绑定(bind)):
template <template<typename, typename> class C, typename T0, typename T1, typename Alloc> C<T1, typename Alloc::template rebind<T1>::other> convert_container(const C<T0, Alloc>& container, T1 value) { C<T1, typename Alloc::template rebind<T1>::other> new_container; // Do some stuff... return new_container; }
C++03(无需重新绑定(bind)):
template <template<typename, typename> class C, typename T0, typename T1, typename Alloc> C<T1, std::allocator<T1> > convert_container(const C<T0, Alloc>& container, T1 value) { C<T1, std::allocator<T1> > new_container; // Do some stuff... return new_container; }
关于c++ - 我可以退回不同类型的模板化容器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782874/