我正在尝试使用boost迭代器适配器为CArray MFC类编写一个简单的STL迭代器。这是我的代码:
#include <boost/iterator/iterator_adaptor.hpp>
#include <afxtempl.h>
class CArrIter : public boost::iterator_adaptor< CArrIter ,
int,
int,
boost::random_access_traversal_tag >
{
public:
CArrIter(CArray<int,int>& arr, int index = 0) : m_arr(arr)
{
this->base_reference() = index;
}
private:
friend class boost::iterator_core_access;
int dereference() const{
return m_arr.GetAt(base());
}
private:
CArray<int,int>& m_arr;
};
使用VC9编译器可以很好地编译。但是当我尝试使用VC7编译时,我收到以下错误:
\包括\升压\迭代\ iterator_traits.hpp(49) :erro r C2039:'difference_type':是 不是。的成员 “增强::详细:: iterator_traits&LT; 迭代&GT;” 同 [ 迭代器= INT ]
\ include \ boost \ mpl \ eval_if.hpp(41): 请参阅类模板 实例 '提高:: iterator_difference' bein g编译 同 [ 迭代器= INT ]
......还有一些......
任何可能出错的线索?我必须包含一些其他头文件?我很擅长推动图书馆。
答案 0 :(得分:4)
我认为boost :: iterator_adaptor&lt;&gt;的第二个模板参数必须是一个有效的迭代器类型,尝试使用int *而不是int。
答案 1 :(得分:0)
它可能与随机访问行为有关,没有遍历容器所需的一切。此链接的“iterator_adaptor要求”部分可能有所帮助:
我不确定int是否可赋值,所以我想知道如果将int更改为int&amp;会发生什么。
还有一些想法: