Khi tôi cố gắng sử dụng std::distance
với trình biến đổi tùy chỉnh trong gcc 4.7, nó than phiền về việc không tìm kiếm difference_type
. Tôi buồn bã không biết tại sao nó thất bại.differ_type không được tìm thấy
#include <iterator>
class nit {
public:
typedef int difference_type;
};
int main() {
const nit test1;
std::distance(test1, test1);
return 0;
}
cung cấp cho các lỗi:
/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h:114:5: error: no type named ‘difference_type’ in ‘struct std::iterator_traits<nit>’
Đây có thể là giải pháp: http://www.cplusplus.com/forum/general/11428/. –
Thử kế thừa lớp của bạn từ một thể hiện của ['std :: iterator'] (http://en.cppreference.com/w/cpp/iterator/iterator). Tôi có thể tưởng tượng rằng 'std :: iterator_traits' chỉ dành riêng cho những thứ thừa kế từ đó. –
Hơn nữa, tôi có thể tiếp tục với 'class nit: public std :: iterator', nhưng 'T' cần phải là một loại không trống, và bạn cần cung cấp 'toán tử-' để làm việc này. Ngoài ra, bạn có thể có 'bidirectional_iterator_tag', nhưng sau đó bạn cần phải cung cấp các bộ gia tăng và so sánh. –