スコープをパラメータとして取るマクロを作成しようとしています。
私は知っています、それはおそらく良いことなどではありません。
これを試していて、プリプロセッサがコンマと括弧を探すという問題が発生しました...問題は列挙型にあります。
マクロのパラメーターであるスコープ内で列挙型を宣言するにはどうすればよいですか?
コンパイラは、列挙項目間のコンマを検出すると、それを区切り文字として認識します。
私がこれに参加した理由を知りたい場合は、名前空間とクラスを登録する必要があるためです。名前空間については、それらがいつ閉じられるかを知る必要があるため、登録する静的関数を最初に呼び出すマクロを作成することを考えていました名前空間をカプセル化し、最後にレジストリから名前空間を削除する静的関数を呼び出します。
マクロを使用すると、コーダーがこれを行うのが簡単になり、ブラケットの最後の名前空間を削除するのを忘れないようにすることができます。
ありがとう、
ジョー
編集:
スコープをパラメーターとして受け入れるマクロが必要です。
#define MYMACRO(unkownscope) unknownscope
class MYMACRO({
// please, don't take this code seriously, it is just an example so you can understand my question
});
今、私が試してみると:
#define MYMACRO(unkownscope) unknownscope
class MYMACRO({
enum {
anything = 1,
everything = 2
};
});
コンパイラはそれがマクロの区切り記号であると考えるため、列挙型内のコンマのためにコンパイルされません。括弧内のコンマでは発生しません。例:
int a(){
int x = anyfunction(1, 2);
}
コンマが二重括弧内にあるため、正常にコンパイルされます。
先に説明できなくてすみません... 私の英語はそれほど上手ではなく、単語がスキップされ続けています =[
答えはタイ!
ジョー