gpt4 book ai didi

c++ - 如何在 C++ 中实现对私有(private)基类的转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:04 25 4
gpt4 key购买 nike

如何在 C++ 中实现对私有(private)基类的转换?我不想使用添加 friend 等技巧。定义公共(public)转换运算符不起作用。

编辑:

例如我有:

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) );
}
}

编辑2

我为什么要这样做?

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

最佳答案

如果定义公共(public)转换运算符不起作用,您可以尝试使用常规函数:

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

不管怎样,有什么意义呢?如果 D 私有(private)地派生自 B,那么您不应该从外部将 D 用作 B .

关于c++ - 如何在 C++ 中实现对私有(private)基类的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3738556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com