C++ 模板中的嵌套类型名

C++ 模板中的嵌套类型名,c++,templates,C++,Templates,我想写一个这样的函数模板: 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(typen

我想写一个这样的函数模板:

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);
这是多余的,因为在声明list时我已经指定了double,而函数b不能与std::vector一起工作,尽管实现非常适合


有人知道如何做到这一点吗?

这就是STL容器提供值\u type typedef的原因之一:


您的变通方法还可以简单地调用do_sthlist;由于模板参数推导。

您可以这样做:

template< typename T >
void do_sth( T & list){
    typename T::value_type value = 0;
    list.push_back(value);
}
你是说像这样的?
template< typename T >
void do_sth( T & list){
    typename T::value_type value = 0;
    list.push_back(value);
}