这是今天的两难境地:

假设我已经

class A{
  public:
   virtual void doit() = 0;
}


然后是A的各个子类,都实现了它们的良好doit方法。现在假设我想编写一个带有两个迭代器的函数(一个在序列的开头,另一个在结尾)。该序列是A子类的序列,例如list<A*>或vector ...函数应在扫描迭代器时调用所有doit方法...如何执行此操作?我想到了:

template<typename Iterator> void doList(Iterator &begin, Iterator &end) {
    for (; begin != end; begin++) {
        A *elem = (serializable*) *begin;
        elem.doIt();
    }
}


但是会产生奇怪的错误...您有更好的主意或特定信息吗?是否可以使用list<A>代替list<A*>

最佳答案

您可以使用std::foreach

std::for_each( v.begin(), v.end(), std::mem_fun( &A::doIt ) );


std::mem_fun将创建一个对象,该对象为其operator()参数调用给定的成员函数。 for_each将为v.begin()v.end()中的每个元素调用此对象。

关于c++ - C++模板化容器扫描器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1873766/

10-12 00:20
查看更多