2016-10-22 4 views
1

現在、C++、私は値を変換するために、このようなコードを記述する必要に:私はこのようなコードを使用できるように、SQLのようなマクロDECODEを作成する方法SQLでDECODE関数のようなC++マクロを作成するには?

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

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

可変パラメータを使用して試してください。 –

+0

パラメータリストは固定ですか、または可変ですか? –

+0

param listは可変であるため、多くの場所でマクロを使用できます。 – 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]) 

可変引数関数は良くあること。 switch私の自然な選択です。または:

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

ありがとうございます。私は機能する表現がより多くのリソースを必要とすると思います。私はDECODEマクロが好きです。なぜなら、それは読みやすいからです(少なくとも私にとって)。しかし、スイッチを使う方が簡単な解決法はありません。 – Manh

関連する問題