C++ 如何从另一个指针重载TYPE*转换?

C++ 如何从另一个指针重载TYPE*转换?,c++,pointers,type-conversion,implicit,C++,Pointers,Type Conversion,Implicit,我似乎找不到任何与这种手术有关的东西 我有一个类TextButton:public textdecocorator类,我想为其重载隐式转换运算符。TextButton类包含一个我想要访问的BasicButton指针 重载类型转换操作符可以正常工作,但是当我使用TextButton*执行强制转换时,它并不能完成我希望它执行的操作 这段代码显示了我的意思: #include <iostream> using std::cout; using std::endl; class A {

我似乎找不到任何与这种手术有关的东西

我有一个
类TextButton:public textdecocorator
类,我想为其重载隐式转换运算符。
TextButton
类包含一个我想要访问的
BasicButton
指针

重载类型转换操作符可以正常工作,但是当我使用
TextButton*
执行强制转换时,它并不能完成我希望它执行的操作

这段代码显示了我的意思:

#include <iostream>
using std::cout;
using std::endl;



class A {
public :
   void DoThis() {cout << "a is " << this << endl;}
};



class B {
   A* a;

public :
   B() : a(new A) {
      cout << "a is " << a << endl << endl;
   }
   ~B() {delete a;}
   operator A*() {return a;}
};



int main(int argc , char** argv) {

   B b;

   A* a1 = (A*)b;/// Implicit conversion works fine for objects of type B
   A* a2 = (A*)&b;/// Implicit conversion works, but is incorrect for objects of type B*

   A* a3 = static_cast<A*>(b);/// Fine, not what I want

///   A* a4 = static_cast<A*>(&b);/// What I want, but illegal
/// "invalid static cast from B* to A*"

   a1->DoThis();
   a2->DoThis();
   a3->DoThis();
///   a4->DoThis();

   return 0;
} 
所以我想让这一切成为可能:

TextButton* tb = MakeTextButton(...);
BasicButton* button_access = (BasicButton*)tb;
让它正常工作


想法?

从基本按钮中插入文本按钮?基本按钮从WidgetBase继承,TextDecorator也间接继承。如果我这样做,我最终会遇到可怕的继承菱形。@ MARCD:然后使用<代码>虚拟< /COD>继承,或者考虑<代码>文本装饰器< /COD>实际上需要从<代码> WiGeBase< /C>中继承。它做到了这一点,所以我可以在任何其他小部件上使用任意数量的不同装饰器。在这种情况下,虚拟继承是不正确的,因为TextButton需要是一个独立的小部件,它的TextDecorator基础也是如此。我只是不想处理菱形继承造成的混乱。我想在这种情况下唯一正确的做法是提供一个返回正确指针的成员函数。事实证明,我最终还是决定继承BasicButton,这样dynamic_cast就可以工作了。我只是想避免重写WidgetBase中的所有不同函数,只是为了将它们转发给负责实际工作的另一个对象。不过,这可能是另一个话题。虽然我不明白为什么不能重载全局转换操作符来完成这项工作。它将大大有助于转发功能。
TextButton* tb = MakeTextButton(...);
BasicButton* button_access = (BasicButton*)tb;