6

単体テスト フレームワークを使用していると、マクロ引数をテストしたい状況に遭遇しました。簡単に言うと、 と となるFOO(x)ようにマクロを展開したいと思います。FOO(int)shortFOO(anything_else)long

もちろん、C++ テンプレートでは、これは問題になりません。しかし、ここでは、単なるtypedef. すなわちFOO(char) FOO(char) i;に等しい有効な定義である必要がありますlong long i;

4

2 に答える 2

3

私の知る限り、C マクロで使用できる文字列のような操作は、トークンの貼り付け/連結 ( を使用##) と、トークンの文字列化 ( を使用#) だけです。

あなたが得ようとしている最も近いものは、次のように可能性を列挙することを含むと確信しています:

#define FOO(x) FOO__##x
#define FOO__int   short
#define FOO__short long
#define FOO__long  long
#define FOO__char  long
// ... for each type you want to replace

この質問からのインスピレーション。

于 2012-06-19T16:43:33.330 に答える
0

あなたがやろうとしていることは不可能です。

マクロは c プリプロセッサによって評価されます。これは、その名前が示すように、コンパイラが実行される前に実行されます。シンボルのタイプがまだわかりません。

コンパイラによって評価されるときに、自分自身を正しいものにキャストする型のクラスを作成してみませんか。

于 2012-06-19T16:36:38.700 に答える