我試圖寫一個簡單的「跳過迭代器」與元素的數量模板參數跳過:推導除一個模板參數以外的所有參數?
template <typename T, typename Iter, int Skip>
class SkipIterator
{
public:
SkipIterator(Iter baseIter) :
baseIter_(baseIter)
{
}
void operator++()
{
baseIter_ += Skip;
}
T &operator*()
{
return *baseIter_;
}
private:
Iter baseIter_;
};
我希望能夠推導基礎Iter
和T
類型像這樣:
std::vector<double> dataFromSomewhere;
SkipIterator<3> skipper(dataFromSomewhere.begin())
但編譯器(VS2010)給出了「太少的模板參數」錯誤。
有沒有辦法做到這一點?
不能推導出模板類的模板參數,所以你必須指定反正所有三個。你可以用'make_skip_iterator'函數來解決這個問題,該函數可以推導出'T'和'Iter'。 – chris
請考慮如何實現'end()',這並不是那麼容易,但非常重要。 –