我有一個STL樣列表容器定義了以下兩個功能:錯誤模板函數被調用
// copy the specified VALUE some COUNT number of times and insert copies
// right before POS.
Iterator insert(Iterator pos, size_type count, const value_type
&value);
// copy the values from [FIRST, LAST) from the specified Iterators and
// place before POS.
template<class InputIt>
Iterator insert(Iterator pos, InputIt first, InputIt last);
然後我試着用一些任意的代碼來測試我的功能實現:
std::list<int> stlList = { 1, 2, 3, 4, 5 };
MyList<int> intList;
intList.insert(intList.begin(), 5, 0); // expected call to first insert
intList.insert(intList.begin(), stlList.begin(), stlList.end()); // expected call to second insert
但是,對於他們來說,這似乎是第二個函數被調用。我發現模糊不清,因爲這兩個函數都有三個參數,我看到編譯器可能會調用錯誤的函數。但我不確定我錯過了什麼。我一直以STL爲基礎開發自己的功能,並且據我所知,他們以幾乎相同的方式定義它們(STL's List Insert)。
什麼是'size_type'定義爲? – NathanOliver
我認爲你的'size_type'是無符號的,所以模板方法是完全匹配的。你可以調用'intList.insert(intList.begin(),5u,0)' – Jarod42
注意關於'std :: list :: insert'的重載(4)(帶有兩個迭代器的那個):「這個過載只有當InputIt符合InputIterator的條件時纔會參與重載解析,以避免過載帶來的不確定性(3)。「 –