具有相关值的枚举

时间:2013-10-18 17:34:01

标签: c++ enums

我有一个与运营商不同运营商的Enum。

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

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

我考虑了3个选项:

1)使用索引为ewual的数组为OperatorsTypes和value = contacts count。

2)使用以下声明:

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

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

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

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

1 个答案:

答案 0 :(得分: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的问题。我猜你想要的信息要多于联系人的数量,而且结构或类比enum更适合。