我想写一个这样的函数模板:
template< typename L<T> > // does not work
void do_sth(L<T>& list){
T value = 0;
list.push_back(value);
}
这意味着,在模板中,我希望使用提供“push_back”的容器,但也希望使用存储在该容器内的类型。
解决方法是
template< typename T >
void do_sth(typename std::list<T>& list){
T value = 0;
list.push_back(value);
}
// call
std::list<double> list;
do_sth<double>(list);
这是多余的,因为 a) 我在声明“list”时已经指定了“double”,并且 b) 该函数不适用于 std::vector,尽管该实现非常适合。
有人知道怎么做吗?
最佳答案
这就是 STL 容器提供 value_type
typedef 的原因之一:
template< typename Container >
void do_sth(Container& list){
typename Container::value_type value = 0;
list.push_back(value);
}
由于模板参数推导,您的解决方法也适用于对 do_sth(list);
的简单调用。
关于c++ - 模板中的嵌套类型名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712075/