【问题标题】:Enum with associated value具有关联值的枚举
【发布时间】:2013-10-18 17:34:01
【问题描述】:

我有一个带有不同运算符的枚举。

enum OperatorsTypes
    {
        Zero, Division, Equal, If, Minus, Multiplication, One, Plus, RandomNumber, Time
    };

每个操作员都有不同的联系人计数。例如 Plus - 2 个联系人计数,随机数 - 零。 存储和使用与操作符相关的联系人计数的基本方法是什么。

我考虑了 3 个选项:

1) 使用索引 ewual 到 OperatorsTypes 且值 = 联系人计数的数组。

2) 使用以下声明:

enum OperatorsTypes
    {
        Zero = 0, Division = 12, Equal = 21, If = 32, Minus = 42, Multiplication = 52, One = 60, Plus = 72, RandomNumber = 81, Time = 90,
    };

第一个数字是身份证号码,第二个数字是联系人计数。然后在某些静态方法中使用 % 运算符,我可以从 OperatorsTypes 值中找到运算符的联系人计数。

3) 在一些静态方法中使用 switch

但是所有这些方法都有缺点......(注意 - 我的代码必须是最高速度)。 在 C++ 中是否有更好的方法来完成这项任务,既美观又高速?

【问题讨论】:

    标签: c++ enums


    【解决方案1】:

    做你想做的事情的一种方法是内联模板函数:

    template <OperatorsTypes o>
    inline int GetOperatorContacts();
    
    template<>
    inline int GetOperatorContacts<Zero>() {return 0;}
    
    template<>
    inline int GetOperatorContacts<Minus>() {return 2;}
    
    //...ect
    

    在 C++11 中,您甚至可以制作这些 constexpr,但我对此没有大量经验。

    但是,这可能是 X 与 Y 的问题。我猜你想要更多的信息,而不仅仅是联系人的数量,而且结构或类比枚举更适合。

    【讨论】:

    • 有趣的选项,但仍然不完美,现在我只需要联系人计数....我有更多的“OperatorsType”,在这个问题中,有时它们会改变.. 这不会令人愉快添加这么多结构
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多