簡體   English   中英

使用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__)

該作品通過允許預處理器來解析在拉姆達,定情到多個參數,但隨后使用所有的這些參數和逗號隔開了,所以實際效果是你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM