如何在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等).然后我希望能够拥有可以拥有任何这些属性集的类.如果我想处理这些属性,很明显,我宁愿将它们转换为基类型,而不是为每个变体添加一个实现.我不使用公共继承,因为最好在需要的地方显式转换,而不是私有接口隐式可见.不是一个真正的问题,但我想有一个解决方案:)
如果定义公共强制转换操作符不起作用,则可以尝试使用常规函数:
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外部.
| 归档时间: |
|
| 查看次数: |
6165 次 |
| 最近记录: |