[英]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.