[英]Where and why do we use “pointers that point to constants”, “constant pointers”, and “constant pointers that point to constants”?
[英]Is it acceptable to use pointers to class as enum constants?
说我有一些全局对象:
MyClass* a = new MyClass()
MyClass* b = new MyClass()
MyClass* c = new MyClass()
哪个代表MyClass
所有有意义的状态
是否有充分的理由不与他们形成如下所列的枚举?
enum MyEnum {
A = (int) a,
B = (int) b,
C = (int) c
}
这样,在其他代码中,我可以传递枚举并将其转换为: (MyClass*) (MyEnum::A)
那行不通。 枚举器只能用常量表达式初始化,而变量a
, b
, c
肯定不是。
枚举值是编译时间常数,其中new的返回值是运行时值,因此您甚至无法做到这一点(而且您可能会丢失将某些数据转换为int的数据)。 我不认为SO进行冗长的讨论来讨论是否有可能是一个好主意。
正如其他人已经说过的那样,这是不可能的。 但是您可以通过单例模式实现类似的功能,例如:
class MyClass
{
public:
enum MyEnum { A, B, C };
static MyClass* getAInstance()
{
static MyClass* a = new MyClass();
return a;
}
static MyClass* getBInstance()
{
static MyClass* b = new MyClass();
return b;
}
static MyClass* getCInstance()
{
static MyClass* c = new MyClass();
return c;
}
static MyClass* getInstance(MyEnum instance)
{
switch(instance)
{
case A:
return getAInstance();
case B:
return getBInstance();
case C:
return getCInstance();
}
}
};
因此,您可以编写MyClass::getInstance(MyClass::A)
而不是(MyClass*) (MyEnum::A)
MyClass::getInstance(MyClass::A)
。
我很好奇:为什么您需要此实现? 顺便说一句,如果需要循环,我建议您使用带有函数指针的向量/数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.