2013-10-18 114 views
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)在一些靜態方法

但是,所有這些方法使用交換機也有缺點......(注意 - 我的代碼必須是最高速度)。 在C++中這個任務是否有更好的方法,既可以保持最佳狀態,也可以最高速度?

回答

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 vs Y問題。我猜測你希望得到更多的信息,而不僅僅是聯繫人的數量,並且結構或類比枚舉更適合。

+0

有趣的選擇,但仍然不完美,現在我只需要接觸計數....我有更多的「OperatorsType」,在這個問題上,sometyme他們改變..它會不愉快添加這麼多的結構 –