如何在C++中实现对私有基类的转换

1 c++ casting base-class

如何在C++中实现对私有基类的转换?我不想使用诸如添加朋友之类的黑客.定义公共投射操作符不起作用.

编辑:

例如,我有:

class A {
//base class
}

class AX : private A {
//a child
}

class AY : private A {
//another specialized child
}

class B {
//base class
void do (A a) {//do
    }
}

class BX : private B {
//a child
void do (AX a) {
     B::do( static_cast <A> (a) );
    }
}

class BY : private B {
//another specialized child
void do (AY a) {
    B::do( static_cast <A> (a) );
    }
}
Run Code Online (Sandbox Code Playgroud)

EDIT2

为什么我这样做?

假设我必须定义一些非常重量级的属性,并且可以是几种类似的类型(如VelocityX VelocityY等).然后我希望能够拥有可以拥有任何这些属性集的类.如果我想处理这些属性,很明显,我宁愿将它们转换为基类型,而不是为每个变体添加一个实现.我不使用公共继承,因为最好在需要的地方显式转换,而不是私有接口隐式可见.不是一个真正的问题,但我想有一个解决方案:)

gpe*_*che 6

如果定义公共强制转换操作符不起作用,则可以尝试使用常规函数:

class D: private B {
    public:
        B& asB() { return static_cast<B&>(*this); }
};
...
D d;
d.asB().methodInB();
...
Run Code Online (Sandbox Code Playgroud)

无论如何,重点是什么?如果D私下派生B,那么你不应该使用a D作为B外部.