0

次のような、指定された数の引数の間で or を作成する C++ マクロを作成する方法を知りたいです。

#define aMacro(arg1,arg2,arg3,arg4) arg1==arg2 || arg1==arg3 || arg1==arg4

ただし、引数の数は可変です。

私はバラディックマクロについて知っています、それらが存在することを知っています、そしてそれについていくつかの質問があることを知っていますが、私が知る限り、それらのどれも || を行う方法に関する私の質問に答えていません 部。

ありがとうございました

4

2 に答える 2

1

うまくいけば、おそらくあなたが気付いていなかった、マクロに代わる非常に優れた代替手段がここにあることを願っています. これはC++11 を必要とする可変個引数テンプレートを使用します。ただし、可変個引数マクロが必要な場合は、C++11 も必要です。

template<typename T>
bool func(T const&)
{
    return false;
}

template<typename L, typename R, typename... Args>
bool func(L const& lhs, R const &rhs, Args const&... args)
{
    return (lhs == rhs) || func(lhs,args...);
}
于 2013-09-20T06:08:43.660 に答える
1

wikipediaから、探しているのは可変長マクロです。

可変個引数マクロは、一部のコンピューター プログラミング言語 (特に C プリプロセッサ) の機能であり、可変数の引数を受け入れるようにマクロを宣言できます。

可変引数マクロは、1999 年に C 言語標準の ISO/IEC 9899:1999 (C99) リビジョンで導入され、2011 年に C++ 言語標準の ISO/IEC 14882:2011 (C++11) リビジョンで導入されました。

したがって、C++11 または C99 で使用できます。一部のコンパイラでも en 拡張機能として利用できます。たとえば、GNU GCC はそれをサポートしています。その VC++ も読んだと思います。

次に、構文については、たとえばこの投稿を見てください。これは簡単な例を示しています。

#define FOO(fmt, ...) printf(fmt, ##__VA_ARGS__)
于 2013-09-20T06:02:46.540 に答える