【发布时间】:2021-10-24 16:10:06
【问题描述】:
如果 list 中的任何元素与给定的predicate 匹配,我有这个函数返回true
bool _any(bool (*predicate)(MyStructure), list<MyStructure> arr)
{
for (int i = 0; i < arr.size(); i++)
{
if (predicate(arr.front()))
return true;
arr.pop_front();
}
return false;
}
这适用于非常简单的 lambda,但如果给定的 lambda 需要捕获 this,那么我会遇到一个错误,我不知道如何修复。
Assert::IsTrue(_any(
[this](MyStructure t)
{
return t._name == "NAME_SEARCHED" &&
t._type == "TYPE_SEARCHED" &&
_any([](OtherStruct o) { return o._name == "SEARCHED_2"; }, t._children);
},
myList));
错误:
cannot convert argument 1 from 'UTests::<lambda_e8bda0383e9f0c2ae44be631a7424852>'
to 'bool (__cdecl *)(MyNameSpace::MyStructure)'
(注:_any 也定义了 OtherStruct)。
【问题讨论】:
-
最简单的方法是使用
std::function或模板。 -
@JeJo 确实,从那时起我就解决了这个问题。我今天刚刚深入研究了 C++(我有很强的 C# 背景),这主要是复制/粘贴的东西,我稍后会复习/增强。关键是确保基础工作正常。
标签: c++ algorithm c++11 lambda function-pointers