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方法。现在假设我想写一个函数,它使用两个迭代器(一个在序列的开头,另一个在序列的结尾)。序列是一个子类的序列,如saylist
或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类型的*