模板中的嵌套类型名称

wal*_*mat 0 c++ templates

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

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,尽管实现完全适合.

有谁知道如何实现这一目标?

thi*_*ton 6

这是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);由于模板参数推断,您的解决方法也可以使用普通调用.