我正在编写一个InputIterator,它实现了operator *和operator->等。
我的运算符*返回一对(向量)元素的引用。因此,运算符*将按值返回。
根据cppreference:
运算符->的重载必须返回原始指针,或者返回对象(按引用或按值),而运算符->的对象又被重载。
那我该怎么办?
我不能返回原始指针;该对必须以某种方式物理返回。 那么可能有一些带有operator->定义的包装器?它是否存在于标准库中,或者通常如何进行?
答案 0 :(得分:4)
自->
will continue "drilling down" until it hits a pointer return type起,您的代码可以为其中嵌入了该对的那个对返回“代理”:
template<class T1, class T2>
class pair_proxy {
std::pair<T1,T2> p;
public:
pair_proxy(const std::pair<T1,T2>& p) : p(p) {}
std::pair<T1,T2>* operator->() { return &p; }
};
注意:我会强烈考虑在您的迭代器中嵌入std::pair
,并从您的operator ->()
实现中返回指向它的指针。
答案 1 :(得分:3)
template<class T>
struct fake_ptr_with_value {
T t;
T* operator->() { return std::addressof(t); }
};
返回fake_ptr_with_value<decltype(**this)>
。
std
中没有暴露这样的帮助程序类型。