[C/C++]マクロの便利な使い方~文字列化・トークン連結演算子~ |
2014年11月27日05:27:22 |
|
知る機会を得るのが難しい機能なのでご紹介します。
マクロ(#define)には便利な演算子が2つあります。
・文字列化演算子 (引数の文字列化)
・トークン連結演算子 (引数をそのままマクロの中に埋め込む)
乱用すると黒魔術化するので用法・用量を正しく守ってご利用下さい。
くれぐれも暗黒面に堕ちないよう祈っています。
まずは文字列化演算子です。
※こちら筆者は具体的なメリットを知りません。不必要に使わなくていいと思います。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #include <cstdio>
#define STRING( s ) #s
int main()
{
printf( STRING( hoge\n ) );
return 0;
} |
出力
hoge |
続いてトークン連結演算子です。
上手く活用すれば、テンプレートに出来ないようなジェネレータに近いものを作り出せます。
テンプレートに出来ないことは次の2つ
・クラス・構造体名の変更
・メンバ変数・メンバメソッドの増減、名称変更 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#define VECTOR_GENERATOR( d, ... ) \
struct Vector##d \
{ \
float __VA_ARGS__;\
}
VECTOR_GENERATOR( 2, x, y );
VECTOR_GENERATOR( 3, x, y, z );
VECTOR_GENERATOR( 4, x, y, z, w );
int main()
{
Vector2 v2;
Vector3 v3;
Vector4 v4;
return 0;
} |
|