我有一个与运营商不同运营商的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 ++中这个任务有更好的方法既美好又高速?
答案 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更适合。