这是我的代码。

#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;
mp_eval(StaticMinimum<9, 12>) 不是要被编译器替换为 StaticMinimum<9, 12>::value 吗?我想我一定错过了什么。请让我知道发生了什么事。

最佳答案

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

宏可以固定为:

#define mp_eval(...)       __VA_ARGS__::value

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

关于当类模板 "*"包含在宏中时,C++ 的参数太少,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22835231/

10-09 05:32