簡體   English   中英

C ++模板化容器掃描器

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM