我想写一个这样的函数模板:
template< typename L<T> > // does not work
void do_sth(L<T>& list){
T value = 0;
list.push_back(value);
}
Run Code Online (Sandbox Code Playgroud)
这意味着,在模板中我想使用提供"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);
Run Code Online (Sandbox Code Playgroud)
这是多余的,因为a)我在声明"list"时已经指定了"double",而b)该函数不适用于std :: vector,尽管实现完全适合.
有谁知道如何实现这一目标?
这是STL容器提供value_typetypedef 的原因之一:
template< typename Container >
void do_sth(Container& list){
typename Container::value_type value = 0;
list.push_back(value);
}
Run Code Online (Sandbox Code Playgroud)
do_sth(list);由于模板参数推断,您的解决方法也可以使用普通调用.
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |