5

マクロ内で、stringizing operator を使用できます#

#define STRINGIZE(name) #name

cout << STRINGIZE(SomeClass) << endl; // Prints "SomeClass"

逆に、マクロ内で文字列を解除することは可能ですか? どのように?

例えば:

#define RUN_FUNCTION(name) UNSTRINGIZE(name)();

void myFunction {
  cout << "Hello!" << endl;
}

RUN_FUNCTION("myFunction") // Prints "Hello!"

そうでない場合、理由はありますか?

4

2 に答える 2

4

いいえ、できません。C++ プリプロセッサは、トークンを小さなトークンに分割することはできません。

あなたがやろうとしていることは、正確には何ですか?ほぼ間違いなく、それを行うためのより良い方法があります。

于 2012-11-02T21:43:05.123 に答える
2

[コメントから昇格]
前処理はコンパイル前、つまり実行前に行われます。何らかの形式のメタデータを必要とする独自のルールを定義せずにそれを行うにはリフレクションが必要ですが、C++ にはそれがありません。

どこかはわかりませんが、最近どこかで見ました (おそらくここですが、ウィキペディアによると、延期されています)。リフレクションは将来いつか C++ に導入される可能性があるため、そこに見込みがあるかもしれません。

于 2012-11-05T21:39:29.073 に答える