gpt4 book ai didi

c++ - 使用 boost::lambda 或 boost::phoenix 与 std::find_if

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:55 28 4
gpt4 key购买 nike

我有这样一个类

class Foo {
public:
int GetID() const { return m_id; }
private:
int m_id;
};

我想在充满 Foo 对象的 vector 上使用 find_if,如下所示:

std::find_if(foos.begin(), foos.end(), ???.GetID() == 42);

我不太明白我必须写什么来代替 ???。我知道 _1 有 boost::lambda 或 arg1 有 boost::phoenix,但在那之后我就不知所措了。

编辑:

我尝试了以下不起作用的方法,尽管我在许多示例中都看到过这样的方法。

std::find_if(foos.begin(), foos.end(), boost::lambda::bind(&Foo::GetID, boost::lambda::_1) == 42);

然后我得到以下错误:

error C2678: binary '==' : no operator found which takes a left-hand operand of type 'const boost::lambda::lambda_functor' (or there is no acceptable conversion)

最佳答案

在这种情况下使用 boost::bind,这确实是 C++11 之前最简单的方法。

std::find_if(foos.begin(), foos.end(), boost::bind(&Foo::GetId, _1) == 42);

如果你应该使用phoenix,你可以使用phoenix::bind

std::find_if(foos.begin(), foos.end(),
phx::bind(&Foo::GetId, phx::placeholders::_1) == 42);

phx

namespace phx = boost::phoenix;

如果您可以使用 C++11 - 您可以使用 std::bind 或 lambda 函数

std::find_if(foos.begin(), foos.end(), 
[](const Foo& f) { return f.GetId() == 42; });

关于c++ - 使用 boost::lambda 或 boost::phoenix 与 std::find_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375911/

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