C++类模板包装在宏中时"*"的参数太少
C++ too few arguments for class template "*" when it's wrapped in a macro
这是我的代码。
#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 中,您可以使用变量模板而不是宏。
预处理器将 9 到 12 之间的逗号视为宏的分隔参数。
将表达式包装在附加()
中以阻止此操作。
cout << mp_eval((StaticMinimum<9, 12>)) << endl;
更新:正如Ggicci在评论中指出的那样,在这种特定情况下,此解决方案是不可能的:它将导致(StaticMinimum<9, 12>)::value
无效C++。
相关文章:
- 考虑引用和常量的可变参数函数包装器
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 如何将参数包装在 C 或 C++ 中并将它们传递给系统或 exec*
- 线程构造函数周围的可变参数模板包装器无法编译
- 具有值包装器的可变参数模板构造函数的类构造函数优先级
- 如何解开参数包包装器?
- 用输出参数包装一个c++函数,以便在javascript/node中使用
- JNI Java包装:如何传递byte[]参数
- 将可变参数模板包装到元组向量
- 如何在 C 中包装C++具有参数的类方法或返回另一个C++类的实例?
- 如何将包装类的对象用作包装函数中的参数
- 对类型的非常量左值引用 - 使用类类型的参数时,目标C++包装器中的错误
- pybind11:如何包装以 std::vector<double> 为参数以避免数据复制的 C++ 函数
- 如何在 SWIG 中包装可变参数模板类的可变参数模板成员函数?
- Boost Python - 用参数包装构造函数
- 重构现有包装类,以使用与包装器本身相同的构造函数参数包装 T
- NPAPI调用参数包装
- 使用不同的模板参数包装模板类
- 根据Template参数包装类型的容器的Template类
- C++用变量参数包装包装宏