C++包含在宏中的类模板"*"的参数太少

Ggi*_*cci 3 c++ macros templates template-meta-programming

这是我的代码.

#define mp_eval(Func)       Func::value

template<int L, int R>
struct StaticMinimum
{
    static const int value = (L < R) ? L : R;
};
// Error: too few arguments for class template "StaticMinimum"
cout << mp_eval(StaticMinimum<9, 12>) << endl;
Run Code Online (Sandbox Code Playgroud)

是不是mp_eval(StaticMinimum<9, 12>)StaticMinimum<9, 12>::value编译器替换了?我想我一定会错过一些东西.请让我知道发生了什么.

小智 6

使用macro(mp_eval(StaticMinimum<9, 12>))时的逗号被解析为参数分隔符.

宏可以固定为:

#define mp_eval(...)       __VA_ARGS__::value
Run Code Online (Sandbox Code Playgroud)

在C++ 1y中,您可以使用变量模板而不是宏.