这就是今天的困境:
假设我
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*>
?
答案 0 :(得分:4)
为什么你认为你需要演员?如果它是A *的集合,你应该只能说:
(*begin)->doIt();
答案 1 :(得分:4)
您可以使用std::foreach
:
std::for_each( v.begin(), v.end(), std::mem_fun( &A::doIt ) );
std::mem_fun
将创建一个对象,为其operator()
参数调用给定的成员函数。 for_each
会为v.begin()
和v.end()
中的每个元素调用此对象。
答案 2 :(得分:1)
您应该提供错误消息以获得更好的答案。
在您的代码中,首先想到的是使用
elem->doIt();
什么是“可序列化”类型?