gpt4 book ai didi

python - 相当于在 python 中将 lambda 函数作为参数传递的 C++

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:17 31 4
gpt4 key购买 nike

在 python 中,您可以将 lambda 函数作为参数传递,如下所示:

class Thing(object):
def __init__(self, a1, a2):
self.attr1 = a1
self.attr2 = a2

class ThingList(object):
def __init__(self):
self.things = [Thing(1,2), Thing(3,4), Thing(1,4)]

def getThingsByCondition(self, condition):
thingsFound = []
for thing in self.things:
if condition(thing):
thingsFound.append(thing)
return thingsFound

things = tl.getThingsByCondition(lambda thing: thing.attr1==1)
print things

有没有办法在 C++ 中做类似的事情?我需要这样做,因为我想在对象的 vector 中搜索满足特定条件的对象。


好吧,我试过这样解决:我应该提到,我在 vector 中管理的“事物”是员工,我想找到满足特定条件的员工。

employee_vector getEmployeeByCondition(function<bool(const Employee&)> condition) {
employee_vector foundEmployees;
for (int i = 0; i < employees.size(); i++) {
Employee e = employees.at(i);
if (condition(e)) {
foundEmployees.push_back(e);
}
}
return foundEmployees;
}

employee_vector getEmployeeByBirthday(Date bday) {
employee_vector found;
found = getEmployeeByCondition([](Employee e) {return e.birthday == bday;});
return found;
}

现在的问题是我显然不能在 getEmployeeByBirthday 的 lambda 函数中使用 bday,因为它是一个局部变量。

最佳答案

是的,您可以将 lambda 传递给函数。

您可以使用模板:

template <typename Func>
void foo (Func f) {
f();
}

foo([]{ std::cout << "Hello"; });

std::function :

void foo (std::function<void()> f) {
f();
}

foo([]{ std::cout << "Hello"; });

如果你想搜索一个std::vector对于满足某些条件的对象,您可以使用 std::find_if :

std::find_if(my_vec.begin(), my_vec.end(), 
[](auto& el) { return /*does this fulfil criteria?*/; });

至于getThingsByCondition它可能看起来像这样:

template <typename T, typename...Ts, typename Func>
std::vector<std::reference_wrapper<T>>
filter(std::vector<T,Ts...>& container, const Func& func) {
std::vector<std::reference_wrapper<T>> ret;

for (auto& el : container) {
if (func(el)) ret.push_back(std::ref(el));
}

return ret;
}

这当然可以改进以适用于不同的容器等。而且它几乎肯定不适用于 std::vector<bool>。 .

关于python - 相当于在 python 中将 lambda 函数作为参数传递的 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36474691/

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