为什么变换迭代器没有实现operator->?

时间:2017-05-26 07:47:17

标签: c++ boost iterator boost-iterators

虽然变换迭代器实现(例如boost::transform_iterator)肯定是有用的,但我发现的所有实现似乎都有一个共同的缺点:它们只提供operator*,而不提供operator->

给定一个返回引用的转换函数,实现operator->很简单。

给定一个按值返回的转换函数,使用代理实现operator->也应该不是问题。

为什么仅提供operator*而不是operator->更为可取?这里使用的代理是否与例如std::vector<bool>

更新:以下是一个非常简单的概念证明,用于演示此类代理对象的工作方式(std::string类型的硬编码):

#include <iostream>
#include <functional>
#include <string>

class StringProxyDemo {
public:
    class Proxy {
    public:
        Proxy(std::string value) : _value(std::move(value)) { }
        std::string *operator->() { return &_value; }
    private:
        std::string _value;
    };

    Proxy operator->() { return _function(); }

    StringProxyDemo(std::function<std::string()> function)
    : _function(std::move(function)) { }

private:
    std::function<std::string()> _function;
};

int main() {
    StringProxyDemo demo(
        []() -> std::string {
            return "Hello, World!";
        }
    );
    std::cout << demo->size() << std::endl;
    std::cout << demo->c_str() << std::endl;
}

Run on Ideone

0 个答案:

没有答案