Lambda捕获列表中能否为按引用捕获的变量设置别名?
Lambda捕获列表中为引用捕获变量设置别名的正确方式
你可以为按引用捕获的变量设置别名,但你的代码写法有误——当前代码里的&fileCSV是取变量地址,实际捕获的是指针而非引用。以下是两种正确实现引用捕获并设置别名的方法:
方法一:使用std::ref包装变量
需要包含<functional>头文件,通过std::ref将变量包装为引用类型:
#include <functional> auto AddSlip = [rFile = std::ref(fileCSV)](COleDateTime datMeeting) { // rFile 是 fileCSV 的引用别名,可直接调用成员方法 rFile.someMemberFunction(); };
方法二:直接在捕获列表中声明引用
在捕获变量前加上&,直接将别名声明为引用类型:
auto AddSlip = [&rFile = fileCSV](COleDateTime datMeeting) { // rFile 作为 fileCSV 的引用别名使用 rFile.someMemberFunction(); };
原代码的问题说明
你写的[rFile = &fileCSV]是将fileCSV的地址赋值给rFile,此时rFile是指针类型。如果要保留这种写法,调用时需使用指针语法(如rFile->someMemberFunction()),但这不属于引用捕获的别名设置。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

