我有一個嵌套模板的自定義迭代器模板類(專門爲常量/非const迭代器)是這樣的:模板迭代器,鐺無法推斷模板參數
template <typename T>
struct A
{
template <typename U>
struct AIterator
{
//...
};
typename AIterator<T*> iterator;
typename AIterator<const T*> const_iterator;
};
template <typename T>
bool operator==(const typename A<T>::iterator& lhs,
const typename A<T>::iterator& rhs,)
{
//...
}
template <typename T>
bool operator!=(const typename A<T>::iterator& lhs,
const typename A<T>::iterator& rhs,)
{
//...
}
//idem for const_iterator...
但鐺不能推斷模板參數:
snake_test.cpp:17:68: error: invalid operands to binary expression ('wavelet::Snake<float>::const_iterator' (aka 'Iterator<const float *>') and 'const_iterator' (aka 'Iterator<const float *>'))
for (wavelet::Snake<float>::const_iterator it = snake.begin(); it != snake.end(); it++)
~~^~~~~~~~~~~~
./snake.hpp:150:6: note: candidate template ignored: couldn't infer template argument 'T'
bool operator!=(const typename Snake<T>::iterator& lhs,
^
./snake.hpp:164:6: note: candidate template ignored: couldn't infer template argument 'T'
bool operator!=(const typename Snake<T>::const_iterator& lhs,
^
1 error generated.
我在做什麼錯?如何正確實現模板類的自定義迭代器?
其中之一,你的參考標籤是在你的論點的錯誤的一面。例如:'lhs&'應該是'&lhs'等。'rhs'參數後面的逗號也沒有幫助。 – WhozCraig
謝謝!我一邊寫這個問題一邊做飯,所以我寫得很快,因此可能會有一些錯別字。 ;-) – matovitch
您是否試過在'A'裏面定義'operator =='和'operator!='? –