C++ 声明和访问单例类中的枚举-C++;
C++初学者问题 如果在单例类的公共部分中存在枚举,那么从单例类外部使用枚举值的正确方法是什么C++ 声明和访问单例类中的枚举-C++;,c++,C++,C++初学者问题 如果在单例类的公共部分中存在枚举,那么从单例类外部使用枚举值的正确方法是什么 class MySingletonClass { public: static MySingletonClass & Singleton(); enum { eCodeZero = 0, eCodeOne = 1 }MsgQueueCodes; protected
class MySingletonClass
{
public:
static MySingletonClass & Singleton();
enum
{
eCodeZero = 0,
eCodeOne = 1
}MsgQueueCodes;
protected:
MySingletonClass ();
~MySingletonClass ();
};
我可以从这个类之外访问这样的枚举值
MySingletonClass::Singleton().eCodeZero
MySingletonClass::Singleton().eCodeOne
我的问题是,
MySingletonClass::MsgQueueCodes myMsgQCode;
//语法不正确]- 如果您的
仅与enum
相关,则最好在类中声明它。然后您必须在定义类定义之外的函数中使用MySingletonClass
MySingletonClass::eCodeZero
- 如果相同的
在其他一些类中使用,那么最好在类之外使用名称空间声明它enum
- 如果您的
仅与enum
相关,则最好在类中声明它。然后您必须在定义类定义之外的函数中使用MySingletonClass
MySingletonClass::eCodeZero
- 如果相同的
在其他一些类中使用,那么最好在类之外使用名称空间声明它enum
MsgQueueCodes
被声明为(未命名)枚举的成员变量。也许你想要:
class MySingletonClass
{
public:
static MySingletonClass & Singleton();
enum MsgQueueCodes
{
eCodeZero = 0,
eCodeOne = 1
};
MsgQueueCodes code;
protected:
MySingletonClass ();
~MySingletonClass ();
};
然后你可以写:
MySingletonClass::MsgQueueCodes code = MySingletonClass::Singleton().eCodeZero;
MySingletonClass::MsgQueueCodes code = MySingletonClass::Singleton().code;
也可以,因为C++ 11,我们有<代码>枚举类< /C> >,这意味着更好的枚举名称范围。例如,见:
代码是有效的,可能是您想要的。请注意,
MsgQueueCodes
被声明为(未命名)枚举的成员变量。也许你想要:
class MySingletonClass
{
public:
static MySingletonClass & Singleton();
enum MsgQueueCodes
{
eCodeZero = 0,
eCodeOne = 1
};
MsgQueueCodes code;
protected:
MySingletonClass ();
~MySingletonClass ();
};
然后你可以写:
MySingletonClass::MsgQueueCodes code = MySingletonClass::Singleton().eCodeZero;
MySingletonClass::MsgQueueCodes code = MySingletonClass::Singleton().code;
也可以,因为C++ 11,我们有<代码>枚举类< /C> >,这意味着更好的枚举名称范围。例如,见:
使用
MySingletonClass::eCodeZero
等。。访问。您发布了它,所以使用它=P枚举的decl不是某个实例的一部分(尽管他们可以自然访问它);它是类decl的一部分,因此任何对该类具有适当访问权限的人都可以直接访问枚举,如图所示。通过在类中声明枚举,您试图限制该类中枚举的范围。那么你是想在另一个类中声明enum吗?既然你是初学者,我就这么说:不要养成使用单例的习惯。“他们几乎从来都不是一个好主意。我支持这一点,@JohnZwinck。当你随意使用单例时,你会遇到很多麻烦。事实上,在过去的几年里,我一直在维护一个有着这个问题的大型项目,除了把剩下的时间花在认真地工作上,我几乎无能为力。@paddy:几乎所有关于设计模式的书都说“单例模式是最简单的”。这将是简单的概念。但依我看,在多线程环境中的正确实现并不是微不足道的。我已经看到[尚未阅读]斯科特·迈尔斯(Scott meyers)撰写的数十页关于如何正确执行此操作的文档。请使用MySingletonClass::eCodeZero
等。。访问。您发布了它,所以使用它=P枚举的decl不是某个实例的一部分(尽管他们可以自然访问它);它是类decl的一部分,因此任何对该类具有适当访问权限的人都可以直接访问枚举,如图所示。通过在类中声明枚举,您试图限制该类中枚举的范围。那么你是想在另一个类中声明enum吗?既然你是初学者,我就这么说:不要养成使用单例的习惯。“他们几乎从来都不是一个好主意。我支持这一点,@JohnZwinck。当你随意使用单例时,你会遇到很多麻烦。事实上,在过去的几年里,我一直在维护一个有着这个问题的大型项目,除了把剩下的时间花在认真地工作上,我几乎无能为力。@paddy:几乎所有关于设计模式的书都说“单例模式是最简单的”。这将是简单的概念。但依我看,在多线程环境中的正确实现并不是微不足道的。我已经看到[尚未阅读]斯科特·梅耶斯(Scott meyers)撰写的数十页关于如何正确执行此操作的文档。