如何重载operator =以返回指向成员的指针?

LaL*_*LeX 1 c++ operator-overloading

有类似下面的代码(简化):

struct MyStruct {
    int member1;
    int member2;
};

class MyClass { 
    MyStruct *data;
}


MyClass obj;

// put obj.data in pstruct  
// so obj.data->element1 is the same as pstruct->element1
MyStruct *pstruct = obj;
Run Code Online (Sandbox Code Playgroud)

我不想创建一个副本,obj.data但返回相同的指针,所以如果我做出pstruct->member1改变是相同的obj.data->element1(和相反的).

这可能吗?

谢谢

sth*_*sth 7

听起来你想要一个转换运算符来创建一个MyStruct*来自MyClass:

class MyClass {
    MyStruct *data;
public:
    operator MyStruct*() {
       return data;
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 我会尽量避免向类型添加转换.当您需要时(如在问题中),隐式转换会启动,但是当您不需要时,打开代码以允许代码中的愚蠢错误.突然`if(obj)`是有效的,`obj + 5`是你可能不想要的两个操作,现在将被允许.这开启了一大堆蠕虫...... (3认同)