c++ - 模板中的嵌套类型名称

标签 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,尽管该实现非常适合。

有人知道怎么做吗?

最佳答案

这就是 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); 的简单调用。

关于c++ - 模板中的嵌套类型名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712075/

相关文章:

c++ - 如何创建 DAWG?

c++ - 结构模板的默认参数

c++ - 成员模板和继承

wpf - 如何在WPF XAML模板中将文本放入圆圈?

c++ - C++ 中的模板化类分配

c++ - C++ 中的多重虚拟继承提示特定函数调用

c++ - 将十六进制字节发送到串行端口

c++ - 是否可以重新启动 boost::future?

c++ - 如何知道我们的系统使用 C++ 遵循小端还是大端?

c++ - 是否可以将 va_list 传递给可变参数模板?