タイトルは一目瞭然だと思いますが、私が達成しようとしていることを説明する例を次に示します。
#define PASTE2(_0, _1) _0 ## _1
#define DEFINE_OPS_FOR_TYPE(TYPE) \
int PASTE2(do_something_with_, TYPE)(void) { \
/* do_something_with_<TYPE> */ \
}
char
、int
、および単一単語の型ではすべて正常に機能しunsigned
ますが、複数のキーワードを持つ型やその他の型に関しては、トークンの貼り付け ( a ## b
) を使用すると、空白 (例: ) が原因で有効な名前が生成されませんdo_something_with_foo bar
。
私が考えることができる最も簡単な解決策はDEFINE_OPS_FOR_TYPE
、2 番目のパラメーターとして有効な名前を取るようにマクロを変更することです。例えば:
#define DEFINE_OPS_FOR_TYPE(TYPE, NAME_FOR_TYPE) \
int PASTE2(do_something_with_, NAME_FOR_TYPE)(void) { \
/* do_something_with_<NAME_FOR_TYPE> */ \
}
これは期待どおりに機能しますが、非常に複雑であっても、他の可能な解決策に興味があります。を使用することを考え_Generic
ましたが、名前の定義にどのように役立つかわかりません。
別の解決策を考えられますか?