当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

Bjarne:为什么不能为模板参数定义约束?

    可以的,而且方法非常简单和通用。

  看看这个:

 template<class container>

void draw_all(container& c)

{

 for_each(c.begin(),c.end(),mem_fun(&shape::draw));

}


  如果出现类型错误,可能是发生在相当复杂的for_each()调用时。例如,如果容器的元素类型是int,我们将得到一个和for_each()相关的含义模糊的错误(因为不能够对对一个int值调用shape::draw的方法)。

  为了提前捕捉这个错误,我这样写:

 template<class container>

void draw_all(container& c)

{

 shape* p = c.front(); // accept only containers of shape*s
 for_each(c.begin(),c.end(),mem_fun(&shape::draw));

}

  对于现在的大多数编译器,中间变量p的初始化将会触发一个易于了解的错误。这个窍门在很多语言中都是通用的,而且在所有的标准创建中都必须这样做。在成品的代码中,我也许可以这样写:

 template<class container>

void draw_all(container& c)

{

 typedef typename container::value_type t;

 can_copy<t,shape*>(); // accept containers of only shape*s
 for_each(c.begin(),c.end(),mem_fun(&shape::draw));

}

共4页 首页 上一页 1 2 3 4 下一页 尾页 跳转到
相关内容
赞助商链接