gpt4 book ai didi

c++ - C++ 中的嵌套 Lambda 捕获

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:58 24 4
gpt4 key购买 nike

我有这样的东西:

// think of Synonym as a set/vector of values
// the purpose of this function is to filter out elements from the 2 synonyms/sets,
// that are not related (similar to SQL inner join) - modifier modifies vars
void Clauses::modifies(Synonym& modifiers, Synonym& modifiedVars, UnaryPredicate isModifies) {
// filter out any modifiers that does not modify (is related to) any of the variables in modifiedVar (left join)
modifiers.removeIf([modifiedVars, &isModifies](int line) -> bool {
return modifiedVars.none([line, &isModifies](int v) -> bool {
return isModifies(line, v);
});
});

// filter out any candidate modifiedVars that is not modified by any modifiers (right join)
modifiedVars.removeIf([modifiers, &isModifies](int varIndex) -> bool {
return modifiers.none([varIndex, &isModifies](int line) -> bool {
return isModifies(line, varIndex);
});
});

// result is an something like an SQL inner join
}

问题是 Visual Studio 提示:

Error   1   error C3480: 'PQL::Clauses::`anonymous-namespace'::<lambda1>::isModifies': a lambda capture variable must be from an enclosing function scope   h:\dropbox\sch\cs3202\spa_cpp\spa\pql.cpp   78
Error 2 error C2665: 'PQL::Clauses::`anonymous-namespace'::<lambda3>::<lambda3>' : none of the 2 overloads could convert all the argument types h:\dropbox\sch\cs3202\spa_cpp\spa\pql.cpp 78
...

最初,代码没有将谓词/条件作为引用传递,但在我认为我需要的地方阅读,但它似乎没有改变任何东西

modifiers.removeIf([modifiedVars, isModifies] ...

更新:我正在为这个项目使用 VS2010

最佳答案

如果您使用的是 Visual Studio 2010,您的代码可能会触发一个错误,该错误不允许您在嵌套的 lambda 中捕获变量。

尝试使用默认捕获模式(例如 [&] 代替)作为解决方法。

此错误已在 VS2012 中修复。

关于c++ - C++ 中的嵌套 Lambda 捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15020337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com