繁体   English   中英

将指针用作枚举常量是否可以接受?

[英]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)

那行不通。 枚举器只能用常量表达式初始化,而变量abc肯定不是。

枚举值是编译时间常数,其中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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM