C++ c++;模板容器扫描器

C++ c++;模板容器扫描器,c++,templates,stl,containers,C++,Templates,Stl,Containers,今天的困境是: 假设我已经 class A{ public: virtual void doit() = 0; } 然后是A的各种子类,它们都实现了良好的doit方法。现在假设我想写一个函数,它使用两个迭代器(一个在序列的开头,另一个在序列的结尾)。序列是一个子类的序列,如saylist或vector。。。函数应该在扫描迭代器时调用所有doit方法。。。如何做到这一点?我想到了: template<typename Iterator> void doList(Iterat

今天的困境是:

假设我已经

class A{
  public:
   virtual void doit() = 0;
}
然后是A的各种子类,它们都实现了良好的doit方法。现在假设我想写一个函数,它使用两个迭代器(一个在序列的开头,另一个在序列的结尾)。序列是一个子类的序列,如say
list
或vector。。。函数应该在扫描迭代器时调用所有doit方法。。。如何做到这一点?我想到了:

template<typename Iterator> void doList(Iterator &begin, Iterator &end) {
    for (; begin != end; begin++) {
        A *elem = (serializable*) *begin;
        elem.doIt();
    }
}
template void doList(迭代器&开始、迭代器&结束){
for(;begin!=end;begin++){
A*elem=(可序列化*)*begin;
元素doIt();
}
}

但给出了奇怪的错误。。。你有更好的想法或具体信息吗?是否可以使用
list
而不是
list

您应该提供错误消息以获得更好的答案

在代码中,首先想到的是使用

elem->doIt();

什么是“可序列化”类型?

为什么您认为需要演员阵容?如果它是一个*的集合,您应该能够说:

(*begin)->doIt();

您可以使用
std::foreach
进行以下操作:

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

std::mem\u-fun
将创建一个对象,该对象为其
operator()
参数调用给定的成员函数。for each的
将为
v.begin()
v.end()
中的每个元素调用此对象。您能给出一些您遇到的奇怪错误的示例吗?Nit:您确定要通过引用传递迭代器吗?是,当然,你可以使用
list
,但是我们需要看到实际的调用才能更好地提出建议。嗯,我不知道如果A是抽象的,他怎么能使用list。对不起,serializable代表A。编译器怎么知道elem有doIt方法???因为它知道elem是A类型的*