2011-04-06 112 views
2

我有一個容器類(稱爲Atom),我想要存儲Term類型的對象。許多STL容器構造函數的格式爲Container(Iterator first, Iterator last)以初始化容器與一些元素集。STL容器樣式和指向特定類型的迭代器(C++)

現在,我希望能夠使用此表單來處理我的Atom類,但我不確定如何從它的容器類中解開迭代器。例如,目前我有:

class Atom { 
public: 
    Atom(std::string str, 
    std::vector<Term>::const_iterator start, 
    std::vector<Term>::const_iterator end); 

這隻允許向量迭代器。我如何概括我所採用的迭代器的類型?

回答

8

當你需要概括的類型,想模板:

class Atom { 
public: 
    template <typename ForwardIterator> 
    Atom(std::string str, 
    ForwardIterator start, 
    ForwardIterator end); 

現在只要遍歷的範圍內,不管它可能是。

1

您可以將構造函數聲明爲自己的模板。只要將startend作爲迭代器,並且如果它們支持該接口,則它們將工作。不要擔心強制迭代器處理類型Term。如果複製構造函數可以將它轉換爲Term,它就可以工作。

的構造可能看起來像:

template<typename I> Atom(std::string str, I start, I end);