具有以下代码(简化):
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;
我不想创建obj.data
的副本,但返回相同的指针,因此如果我在pstruct->member1
中进行更改obj.data->element1
中的更改相同(反之亦然) )。
这可能吗?
由于
答案 0 :(得分:7)
听起来您想要一个从MyStruct*
创建MyClass
的转换运算符:
class MyClass {
MyStruct *data;
public:
operator MyStruct*() {
return data;
}
};
答案 1 :(得分:2)
没问题。
MyClass obj;
MyStruct *pstruct = obj.data;
答案 2 :(得分:2)
第一件事是你不能为指针重载操作符,好的是你不需要,你只需要分配指针:
MyClass obj;
MyStruct *pstruct = obj.data; // Assuming that `data` is accessible here
如果您无权访问内部data
成员,则需要提供访问权限(返回指针的成员函数--breaks encapsulation),或者使调用代码为{{1 } friend
授予对内部类型的访问权限(仍然会破坏封装,只需少一点)。
答案 3 :(得分:1)
你可以使用转换运算符执行您想要的操作,但我更愿意看到您编写getter method。这可以避免隐式转换的问题。
class MyClass {
private:
MyStruct *data;
public:
MyStruct* GetData() const { return data; }
};
int main () {
MyClass obj;
MyStruct *pstruct = obj.GetData();
MyStruct *pstruct2;
pstruct = obj.GetData();
}