【发布时间】:2010-09-17 19:57:20
【问题描述】:
如何在 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) );
}
}
EDIT2
我为什么要这样做?
假设我必须定义一些重量级的属性,并且可以是几种相似的类型(如 VelocityX VelocityY 等)。然后我希望能够拥有可以具有任何这些属性集的类。如果我想处理这些属性,很明显,我宁愿将它们转换为它们的基本类型,而不是为每个变体添加一个实现。我不使用公共继承,因为最好在需要的地方显式转换,而不是让私有接口隐式可见。不是一个真正的问题,但我想有一个解决方案:)
【问题讨论】:
-
您能告诉我们您想做什么吗?这看起来像非常糟糕的设计。为什么不使用公共继承?还是组合和getter函数?您能否也提供给我们不起作用的代码?
-
请注意,许多人并不认为
friend是“黑客”。 -
当您有很多课程可能需要添加到该朋友列表中时,我认为这是一种 hack
-
你在上面的一些不错的切片......
-
private继承意思 “不要把它当作它的基础。”这具有非常强烈的代码气味。我建议您完全重新考虑您的方法。
标签: c++ casting base-class