[英]c++ templated container scanner
这是今天的两难境地:
假设我已经
class A{
public:
virtual void doit() = 0;
}
然后是A的各个子类,都实现了它们的良好doit方法。 现在假设我想编写一个带有两个迭代器的函数(一个在序列的开头,另一个在结尾)。 该序列是A子类的序列,例如list<A*>
<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*>
为什么您认为需要演员表? 如果它是A *的集合,您应该可以说:
(*begin)->doIt();
您可以使用std::foreach
来实现:
std::for_each( v.begin(), v.end(), std::mem_fun( &A::doIt ) );
std::mem_fun
将创建一个对象,该对象为其operator()
参数调用给定的成员函数。 for_each
将为v.begin()
和v.end()
每个元素调用此对象。
您应该提供错误消息以获得更好的答案。
在您的代码中,首先想到的是使用
elem->doIt();
什么是“可序列化”类型?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.