gpt4 book ai didi

c++ - 从包装类公开内部类的公共(public)枚举

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:54 26 4
gpt4 key购买 nike

我有这样的情况:

class Inner
{
public:
enum myEnum;
myEnum getInnerEnumValue();
};

class Outer
{
private:
Inner myInner;
public
Inner::myEnum getOuterEnumValue()
{
return myInner.getInnerEnumValue();
}
};

Inner 类是围绕硬件 API 的相当低级别的包装器,而 Outer 类是一个额外的层,用于为某些功能提供更好的接口(interface)并在不同的数据结构之间进行转换。我希望外界使用 Outer 而忘记 Inner。

但是,Inner 定义了一个枚举和一个 getter 方法,这正是我获取某条信息所需要的。我想将此枚举用作 Outer 的返回类型,直接将其传递。但是,如果我如上所示声明 getEnumValue() 函数,我就会通过让外部世界包含 Inner 的头文件来打破封装。

如何在不重写相同代码的情况下从 Inner 提取枚举定义,并将其呈现为 Outer 的公共(public)枚举?

最佳答案

我建议只在您的外部类中提供一个 typedef。像这样的东西:

class Outer {
public:
typedef Inner::myEnum myEnum;

myEnum getInnerEnumValue();
};

或者,您可以使用私有(private)继承(这可能会更好一些):

class Outer : private Inner {
public:
using Inner::myEnum;

myEnum getInnerEnumValue();
};

至少这样,您的类的消费者不会直接依赖于内部类。将来您可以自由地将 typedef 替换为您自己的枚举(如有必要)。消费者仍然必须包含内部类头文件,但没有办法解决这个问题。

关于c++ - 从包装类公开内部类的公共(public)枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001285/

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