这是我的代码。
#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/