[英]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__)
該作品通過允許預處理器來解析在拉姆達,
定情到多個參數,但隨后使用所有的這些參數和逗號隔開了,所以實際效果是你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.