相关疑难解决方法(0)

具有/不具有捕获变量的lambda之间的签名差异?

我现在正在使用C++ 11,并发现使用lambda作为sqlite回调的以下问题.在lambda中捕获向量变量时,我收到一条错误,指出签名不匹配.不在lambda中使用该变量([]而不是在内部[&ret]使用ret),它可以正常工作.

vector<SomeClass> ret;
char *err = nullptr;
int res = sqlite3_exec(db,
                       "some sql query, doesn't matter",
                       [&ret](void *unused, int argc, char **argv, char **columnName) -> int
                       {
                           ret.push_back(SomeClass());
                           return 0;
                       },
                       nullptr,
                       &err);
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

cannot convert 'TestClass::testMethod()::<lambda(void*, int, char**, char**)>' to 'int (*)(void*, int, char**, char**)' for argument '3' to 'int sqlite3_exec(sqlite3*, const char*, int (*)(void*, int, char**, char**), void*, char**)'
Run Code Online (Sandbox Code Playgroud)

GCC版本是Windows上的"gcc(XvidVideo.RU - GCC 4.6.1 i686-pc-mingw32)4.6.1 20110625(预发行版)".

为什么这会有所不同?

lambda c++11

6
推荐指数
1
解决办法
1281
查看次数

标签 统计

c++11 ×1

lambda ×1