我想創建不同類型的容器,並且要使用我的SortedContainer類進行排序。 (我現在不想使用像std :: sort()這樣的函數)。用於迭代器的C++模板構造函數
std::deque<int> d; d.push_back(2); d.push_back(1);
SortedContainer<int> sc1(d.begin(), d.end());
在SortedContainer類,我想創建一個拷貝構造函數,處理該容器的迭代器(d.begin()和d.end())。
但是,如果我創建另一種類型的STL容器,我想要做同樣的事情。
std::vector<int> v; v.push_back(2); d.push_back(1);
SortedContainer<int> sc2(v.begin(), v.end());
在這種情況下,我使用std :: vector而不是std :: deque。所以基本上,這將是一個模板構造函數。
template <class T>
class SortedContainer
{
//...
public:
SortedContainer(template_iterator begin, template_iterator end)
{
//...
}
};
我知道,如果我加入類template_iterator作爲模板參數,它會很好地工作。
SortedContainer<int, std::deque::const_iterator> sc1(d.begin(), d.end());
但我不希望實例化SortedContainer類時告訴集裝箱的類型。我想通過container.begin()和container.end()傳遞給它的構造函數。
我已經嘗試過使用std :: function和其他類型的方法,但都沒有工作。
一種方式是寫一個'make_SortedContainer()'實用*功能*,以使編譯器可以推斷類型;以'std :: make_pair <>()'爲例。 –