gpt4 book ai didi

c++ - 使用即时计算的临时值为 ForwardIterator 实现成员访问运算符->

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:12 25 4
gpt4 key购买 nike

我正在为一个适配器范围实现一个迭代器,它懒惰地评估原始范围上的某些东西。这意味着:取消引用迭代器应该取消引用底层迭代器并对结果应用一些操作,然后返回该操作的结果。

T operator*() const {
return someOperation(*original_iterator);
}

如何实现类似于此 operator*operator->?在查看其他迭代器的实现时,它们通常返回一个 T*。但是我不能返回一个指针,因为“指向对象”是一个临时的、即时计算的。

在这种情况下,通常的指导是什么?我可以简单地返回一个 T 吗?

虽然我个人不需要这个运算符(我也可以使用 (*i​​).m 而不是 i->m 并且标准算法不需要似乎也依赖于 ->),我希望我的迭代器严格符合 ForwardIterator概念是InputIterator的特化这需要实现此运算符。

最佳答案

最简单的方法是只使用 Boost.Iterators 来实现您的迭代器,它会处理棘手的代码。

但是 Boost.Iterators 使用的技术并没有那么复杂。它看起来像这样:

template <typename T>
class proxy_holder {
T t;
public:
proxy_holder(const T& t) : t(t) {}
T* operator ->() const { return &t; }
};

class the_iterator {
// ...
proxy_holder<my_proxy> operator ->() const {
return proxy_holder<my_proxy>(**this);
}
};

这依赖于箭头运算符被链接的事实,即如果一个箭头运算符返回不是原始指针的东西,箭头运算符将依次调用那个东西,直到你得到一个指针。

关于c++ - 使用即时计算的临时值为 ForwardIterator 实现成员访问运算符->,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26495962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com