可以的,而且方法非常简单和通用。
看看这个:
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 } |
template<class container> void draw_all(container& c) { typedef typename container::value_type t; can_copy<t,shape*>(); // accept containers of only shape*s } |