通過值捕獲(或 const 引用捕獲)傳進 lambda,會默認復制成 const。
背景
匿名函數外部定義 QSet<QString> nameSet
,需要傳入匿名函數使用修改
connect(dlg, ..., [nameSet](...) {nameSet.insert(name); // ? 這里其實是 const QSet<QString>
});
所以報錯:
XXX.cpp:604:33: No matching member function for call to 'insert'
qset.h:155:21: candidate function not viable: 'this' argument has type 'const QSet<QString>', but method is not marked const
qset.h:157:21: candidate function not viable: 'this' argument has type 'const QSet<QString>', but method is not marked const
qset.h:179:14: candidate function not viable: requires 2 arguments, but 1 was provided
解決:
使用引用&捕獲
connect(dlg, ..., [&nameSet](...) {});