模板类作为模板参数

Silvermangb

如何在容器和类型上定义模板化的功能?

例如,重载插入运算符用于流送向量,列表或转发迭代器容器的所有元素:

using namespace std;

#include <iostream>
#include <vector>
#include <list>


//...
//...the second argument is a container template-ed on type T
//...
template <typename T,template <typename U> class C>
ostream&
operator<<
  (ostream& p_os,const C<T>& p_c)
{
  for(typename C<typename T>::const_iterator cit=p_c.begin();cit!=p_c.end();++cit)
  {
    p_os.operator<<(*cit);
  }
  return p_os;
}

int
main
  ()
{
  vector<int> v;
  cout << v << endl;
  list<int> l;
  cout << l << endl;
  return 0;
}

这不能在g ++ 4.9上编译。怎么了?怎么做?

艾伦·斯托克斯

为什么不只将容器类型作为模板参数传递,然后从中找出元素类型?在示例代码中,您甚至不需要元素类型:

template <typename C>
ostream&
operator<<
  (ostream& p_os,const C& p_c)
{
  typedef typename C::value_type element_type; // if needed
  for(typename C::const_iterator cit=p_c.begin();cit!=p_c.end();++cit)
  {
    p_os.operator<<(*cit);
  }
  return p_os;
}

(尽管不加任何技巧,将其用于这样的全局函数可能是不明智的enable_if,因为否则它将与任何参数匹配。)

编辑:例如,您可以尝试将其限制为具有嵌套value_type(所有容器都具有)的类:

template <typename C, typename T = typename C::value_type>
ostream&
operator<<
  (ostream& p_os,const C& p_c)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模板类作为模板参数默认参数

来自分类Dev

模板类作为模板类参数

来自分类Dev

模板类作为模板类参数

来自分类Dev

使用模板类作为模板参数

来自分类Dev

特性类作为模板模板参数

来自分类Dev

嵌套类作为模板参数

来自分类Dev

模板作为类中的参数

来自分类Dev

模板作为类中的参数

来自分类Dev

模板类的模板参数

来自分类Dev

嵌套类型作为基类的模板参数

来自分类Dev

std :: array作为类的模板参数

来自分类Dev

如何使用类的类型作为模板的参数

来自分类Dev

模板类作为Stl容器参数

来自分类Dev

C ++枚举类作为变量模板参数

来自分类Dev

C ++-使用基类作为模板参数

来自分类Dev

使用自身作为参数的模板类。C ++

来自分类Dev

以子类作为模板参数继承类

来自分类Dev

std :: array作为类的模板参数

来自分类Dev

类模板作为模板专业化中的参数

来自分类Dev

在C ++中将内部模板类作为模板参数传递

来自分类Dev

在模板专业化中将类模板作为参数

来自分类Dev

作为模板参数 C++ 给出的类的别名模板

来自分类Dev

模板功能作为模板参数

来自分类Dev

以模板作为模板参数的功能

来自分类Dev

模板功能作为模板参数

来自分类Dev

以模板作为模板参数的功能

来自分类Dev

将模板类作为类成员函数内的模板模板参数传递

来自分类Dev

类模板:限制模板参数

来自分类Dev

嵌套类作为C ++中父类的模板参数