2013-11-23 77 views
0

我正在做一個模板,它表示容器與過濾器。它將包含容器應具有的所有方法,但所有方法都可以使用該過濾器。所以例如如果過濾器是>1那麼begin()將返回適合該過濾器的第一個元素。我想問一下模板聲明是否正確,或者它應該是什麼樣子?它應該是模板中的模板還是?模板接收容器作爲參數

template<typename Container,class Filter> 
class filtered_cont{ 
//methods working with container 
} 
+0

這可能是繼承工作,從容器派生的filtered_cont。它仍然可以是Filter中的一個模板,這種方式可以用概念的方式實現,只有期望filtered_cont的東西可以使用它,所以沒有辦法強制它是一個容器(除了編譯時錯誤,假設你不放置靜態斷言並檢查每種方法的存在))) –

+0

看起來沒問題。您可以像處理標準庫中的分配器一樣處理過濾器。 –

回答

0

如果要更改的唯一事情是)由()開始和結束(返回的迭代器,我不會與容器混亂......離開他們是剛剛創建佔據容器的輔助功能,過濾器並返回您的新迭代器:

template<typename Container, typename Predicate> 
magic_it filter_begin(Container aContainer, Predicate p) { /.../ return magic ; }