Overloaded -> and *: how to access initial class?
我有一个包含
1 2 | Property myProp; myProp->trace(); |
上面的代码允许直接从包含矩阵的
现在,我想添加一个对我的
1 | myProp->registerCallback(myCallback); |
我的问题是,
因此我的问题是:在一个操作符被重载以返回另一个类型之后,是否有任何技巧可以使用基本类型?
谢谢!
在C++ 11中有EDCOX1×0函数。Boost库还提供了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include <iostream> #include <memory> struct Data { void foo() { std::cout <<"Data::foo" << std::endl; } }; template <typename T> class Property { public: Property() : data(new T) {} ~Property() { delete data; } T** operator &() { return &data; } T* operator->() { return data; } void foo() { std::cout <<"Property::foo" << std::endl; } private: T *data; }; int main() { Property<Data> p; p->foo(); std::addressof(p)->foo(); } |
您仍然可以使用
1 2 3 | Property myProp; myProp->trace(); myProp.registerCallback(myCallback); |
你有个小误会。如果你超载了
我不知道你为什么要让