模板中的嵌套类型名称

时间:2012-01-03 12:09:07

标签: 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(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,尽管实现完全适合。

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

2 个答案:

答案 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);
}