如果我正確地理解了這個問題,那麼基本上你所說的是一個多路複用器。即將幾個信息流組合成一個。這可以使用查找表輕鬆實現,並且這取決於您的實施。
您可以將各種輸入流組合成一個關鍵對象。 我已經在下面包含一些代碼,但沒有時間檢查/運行它,所以請把它當作僞碼而不是逐字。
使用地圖
struct MyKey
{
MyKey(bool X, bool Y, bool Z, bool SC1, bool SC2) :
X_(X), Y_(Y), Z_(Z), SC1_(SC1), SC2_(SC2) {}
bool X_;
bool Y_;
bool Z_;
bool SC1_;
bool SC2_;
};
您還需要爲了在關聯容器使用此一功能operator<()
。然後你建立一個映射集如地圖:
typedef enum foo FooEnum;
std::map< MyKey, FooEnum > myMap;
此地圖需要進行設置,當你的應用程序啓動和加載一個類似如下:
myMap.insert(std::make_pair< MyKey, FooEnum >(MyKey(true,false,true,false,false), XandZ));
該地圖X和Z只有對XandZ
真實,所以你需要這個每個排列。
一旦你過來做檢查,那麼只需將是:
std::map< MyKey, FooEnum >::const_iterator it = myMap.find(MyKey(X,Y,Z,SC1,SC2));
if (it != myMap.end())
{
enum foo valueINeed = it.second;
// ...
使用矢量/陣列
有一些這方面的變化。例如,您可以將輸入流的值作爲掩碼中的位(此處爲5位),並使用32個元素的數組或向量將每個置換映射到單獨的元素。
如果你這樣做,你甚至可以在編譯時創建集合。儘管你不得不測試它,但它可能會運行得更快一些。缺點是代碼可能更深奧一點,但是再也沒有針對文檔的法律!
你試過開關盒嗎? – 2012-08-03 12:45:48
你能清楚輸入嗎?你給了一個枚舉值,還是你給了X,Y和Z來確定一個枚舉值? – 2012-08-03 12:58:17
爲了清晰起見進行了編輯。我需要分配這些標籤中的一個。 – 2012-08-03 13:32:31