如何将远程设备映射为C++;? 我想创建一个C++对象来封装外部外围设备的RAM。我正在尝试设置如下内容:

如何将远程设备映射为C++;? 我想创建一个C++对象来封装外部外围设备的RAM。我正在尝试设置如下内容:,c++,operator-overloading,C++,Operator Overloading,外周血p p[4]=10 int n=p[5] 为此,每当访问阵列元素时,我需要读取或写入外围设备。 我无法使用运算符重载等方法解决此问题。我可以在第二行中返回一个可用作左值的“accessor”对象: 外设访问器外设::运算符[](int i) 或者我可以定义一个“简单”运算符,用于从第三行的外围设备读取int: int外设::运算符[](int i) 但我无法让两者共存,以同时对外围设备进行读写访问。我可以将第二个操作符定义为const(rvalue)操作符,但只有在该类的const实例中调

外周血p

p[4]=10

int n=p[5]

为此,每当访问阵列元素时,我需要读取或写入外围设备。 我无法使用运算符重载等方法解决此问题。我可以在第二行中返回一个可用作左值的“accessor”对象:

外设访问器外设::运算符[](int i)

或者我可以定义一个“简单”运算符,用于从第三行的外围设备读取int:

int外设::运算符[](int i)

但我无法让两者共存,以同时对外围设备进行读写访问。我可以将第二个操作符定义为const(rvalue)操作符,但只有在该类的const实例中调用它,这还不足以满足我的需要


希望我已经清楚地解释了我在这里想要实现的目标;有谁能建议我应该怎么做(或者是否可能)?

处理这个问题的通常方法是使用代理对象:

class register_proxy { 
public:
    register_proxy &operator=(int value) { 
        write_value(value);
    }

    operator int() {
        return read_value();
    }
};

class peripheral { 
    register_proxy registers[4];
public:

    register_proxy &operator[](int reg_num) { return registers[reg_num]; }
};

我省略了一些细节(比如如何告诉每个
register\u proxy
要读/写的实际寄存器号——通常是通过将参数传递给ctor)。在任何情况下,总体思路都非常简单:
操作符[]
返回对代理对象的引用。代理对象的
运算符int
(当然,也可以是它所采用的任何类型)在赋值的右侧使用时被调用。代理对象的
操作符=
在赋值的左侧时被调用,因此您试图在那里写入一个值。

由于不能基于返回类型重载,因此必须选择其中一个(并且不能选择int,因为这样您就不会得到左值行为)。但是,您可以将PeripheralAccessor自动转换为int

编辑:杰瑞打败了我。代码为偶数。

为“外设访问器”提供int的隐式转换运算符:

operator int () const;

太棒了,谢谢。这是一个事实,你可以做:运算符int(),我还没有计算出来。