3

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

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,
    };

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

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

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

4

1 回答 1

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 的问题。我猜你想要更多的信息,而不仅仅是联系人的数量,而且结构或类比枚举更合适。

于 2013-10-18T17:39:44.030 回答