带有lambda参数的c++宏使用2+捕获元素生成错误
C++ macro with lambda argument using 2+ captured elements generates error
foo(const std::function<void()>& functor) {
....
}
#define MACRO_EXAMPLE(functor) foo(functor)
int main() {
int i = 0, j = 0;
MACRO_EXAMPLE([i](){}); // works fine
MACRO_EXAMPLE([i, j](){}); // error: macro "MACRO_EXAMPLE" passed 2 arguments, but takes just 1
});
}
为什么?如何让宏理解lambda ?
再加一轮括号:
MACRO_EXAMPLE(([i, j](){}));
// ^ ^
否则,
之前的部分被解释为宏的第一个参数,,
之后的部分被解释为宏的第二个参数
作为@SingerofTheFall的答案(在调用宏时修复问题)的替代方案,您还可以在宏本身中修复问题,通过将其设置为可变的:
#define MACRO_EXAMPLE(...) foo(__VA_ARGS__)
这是通过允许预处理器将,
标记处的lambda解析为多个参数来工作的,但然后再次使用所有这些参数和分隔逗号,因此净效果是您想要的。
相关文章:
- 从矢量中删除元素后出现隔离错误
- 删除映射和分割错误中的一个过去结束元素
- 在 alglib::real_1d_array 中获取元素总和的奇怪错误
- C++ - 将元素按升序插入数组的 SEG 错误
- 使用 <list> (错误 C2760) 打印队列的元素
- C++:使用类在向量中搜索特定元素时,我得到了错误的结果
- 用于查找数组中最大元素的出现次数的代码,给出分段错误
- C++ 将元素分配给映射值时访问错误
- 从加密项目向量中解密任意选择的元素会导致无效的 PKCS #7 块错误
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- Leetcode 540 上的运行时错误.排序数组中的单个元素
- std::我不明白的矢量元素错误
- 如何修复从矢量中删除元素的错误?
- 为什么我在对向量的第二个元素"push_back"中有C3867错误
- 尝试访问 3D 矢量中的元素时出现 Seg 错误
- OpenCV 文件存储 - 错误:元素之间的解析错误 (icvYMLParseValue) 缺失
- 访问range_expression中的嵌套元素会返回不完整的映射(段错误)
- 打印向量元素错误消息
- 数组中的cout元素错误,错误
- 迭代并移除Vector中的元素.错误:Vector迭代器不可递增