引数の量に基づいてオブジェクトのインスタンスを選択するマクロを作成しようとしています。マクロは0〜2つの引数をサポートする必要があります。 望ましい結果は、次の3つのいずれかを選択し、任意の場合は0〜2引数を渡している。ここで引数の量に基づいてオブジェクトのインスタンス化を選択するマクロ
MyClass obj(hardcoded_arg); // Choose this one if no arguments passed to a macro
MyClass obj(hardcoded_arg,arg1); // This one if a single argument passed
MyClass obj(arg1,arg2); // This one if two arguments passed
は、私はそれを達成しようとしている方法です:
#define TYPE1(...) MyClass obj(hardcoded_arg);
#define TYPE2(arg1) MyClass obj(hardcoded_arg,arg1);
#define TYPE3(arg1,arg2) MyClass obj(arg1,arg2);
#define EXPAND(x) x
#define GET_TYPE(DUMMY, _1 ,_2, NAME, ...) NAME
#define INSTANTIATE(...) EXPAND(GET_TYPE(DUMMY ,##__VA_ARGS__, TYPE3, TYPE2, TYPE1))(__VA_ARGS__)
INSTANTIATE()
INSTANTIATE(1)
INSTANTIATE(1,2)
私が試しました
#define VA_ARGS(...) , ##__VA_ARGS__
#define INSTANTIATE(...) EXPAND(GET_TYPE(DUMMY VA_ARGS(__VA_ARGS__), TYPE3, TYPE2, TYPE1))(__VA_ARGS__)
などの定義を使用していますが、この場合も解決しませんでした。 INSTANTIATE(、)のような解決策は不足しています。
アドバイスありがとうございます。
を私はあなたが必要とする理由を理解しませんまったくマクロ。 3つのコンストラクタがそれぞれ0,1または2のパラメータを取るのはなぜですか? – user463035818
hardcoded_argは呼び出し元オブジェクト – user3348108
の "this"ポインタなので、ポインタを明示的に渡さないのはなぜですか?コードを理解しやすくするだろうか? – user463035818