現在マクロ関数の定義の方法について悩んでいます。
次のような定義があったとき、
/* code 1*/
#define Get(n,type) ((type) n)
typedef unsigned int my_u_int
typedef signed int my_s_int
typedef float my_float
/* code 2 */
#define GetType(i) ((i==0) ? my_u_int : ((i==1) ? my_s_int : my_float))
int main() {
int t=0;
/* tが変化 */
double g = Get(123.456,GetType(t));
return 0;
}
・code1の定義は絶対に変更できない
・変数tの結果によってGet関数の第2引数を {my_u_int, my_s_int, my_float}のいずれかにする(tは0~2の間であると仮定する)←これをマクロ化したい
そこで登場したのがcode2のGetType関数です。
しかし、これではコンパイルが通りません。(当たり前ですが) このような感じにコードを(なるべくスマートに)書こうとしたらどのように書けば良いのでしょうか?