我想写一个像这样的函数模板:
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,尽管实现完全适合。
有谁知道如何实现这一目标?
答案 0 :(得分:6)
这是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);
的简单调用。
答案 1 :(得分:2)
你可以这样做:
template< typename T >
void do_sth( T & list){
typename T::value_type value = 0;
list.push_back(value);
}