2016-10-22 53 views
1

目前在C++我寫這樣的代碼轉換值:如何在SQL中創建類似DECODE函數的C++宏?

if (a == 1) { 
     b = "one"; 
    } else if (a == 2) { 
     b = "two" 
    } else if (a == 3) { 
     b = "three" 
    } else { 
     b = "too_big" 
    } 

如何創建宏DECODE像SQL這樣我就可以使用這樣的代碼:我是一個

b = DECODE(a, 1, "one", 2, "two", 3, "three", "too_big"); 
+0

嘗試使用可變參數。 –

+0

參數列表修復或變量? –

+0

參數列表是可變的,所以我們可以在很多地方使用宏。 – Manh

回答

0

在C中有點生鏽,並且會使用可變參數函數。但隨着宏...

首先一個正常運作的表達(我希望):

b = (char* s[] = {"one", "two", "three", "too_big"}, 
    int n = sizeof(s)/sizeof(char*), 
    s[(a >= n ? n : a) - 1]); 

那麼什麼可以成爲是:

b = DECODE(a, { "one", "two", "three", "too_big" }); 

這是不太一樣的。

所以宏:

#define DECODE(a, sss) (char* s[] = sss, \ 
      int n = sizeof(s)/sizeof(char*), s[(a >= n ? n : a) - 1]) 

一個可變參數函數是更好的。 A switch聲明我自然而然的選擇。或者:

b = a == 1 ? "one" 
    : a == 2 ? "two" 
    : a == 3 ? "three" 
    : "too_big"; 
+0

謝謝。我認爲功能表達需要更多的資源。我更喜歡DECODE宏,因爲它更具可讀性(至少對我而言)。但是並不容易,那麼使用Switch就更好了。 – Manh

相關問題