作为谓词的成员函数比较

发布于 2024-11-19 05:39:55 字数 635 浏览 0 评论 0 原文

我有这样的结构。

struct A
{
  int someFun() const;
  int _value;
};

我将这种结构的对象存储在向量中。

  1. 如何找到其成员someFun()返回42的对象?

  2. 如何查找_value42的对象?

我想我必须使用 bindequal_to 的组合,但我找不到正确的语法。

vector<A> va;
vector<A>::const_iterator val = find_if(va.begin(),va.end(),boost::bind(???,42));

编辑:

谢谢。但还有一个疑问。

如果我有 vectorvector 会怎样? >?

I have a structure like this.

struct A
{
  int someFun() const;
  int _value;
};

I store objects of this structure in a vector.

  1. How to find the object whose member someFun() returns 42?

  2. How to find the object whose _value is 42?

I guess I have to use the combination of bind and equal_to, but I'm not able to find the right syntax.

vector<A> va;
vector<A>::const_iterator val = find_if(va.begin(),va.end(),boost::bind(???,42));

Edit:

Thanks. But one more doubt.

What if I had vector<A*> or vector<boost::shared_ptr<A> >?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

等你爱我 2024-11-26 05:39:55
vector<A> va;

vector<A>::const_iterator v0 = find_if(
    va.begin()
    , va.end()
    , boost::bind(&A::someFun, _1) == 42 );

vector<A>::const_iterator v1 = find_if(
    va.begin()
    , va.end()
    , boost::bind(&A::_value, _1) == 42 );

如果您确实需要编写绑定表达式(例如,使用无法用boost::bind支持的运算符表达的函子):

vector<A>::const_iterator v1 = find_if(
    va.begin()
    , va.end()
    , boost::bind(functor(), boost::bind(&A::someFun, _1), 42) );

这会导致对 functor::operator() 的调用,其参数如下:调用绑定表达式参数上的成员的结果,以及 42。

vector<A> va;

vector<A>::const_iterator v0 = find_if(
    va.begin()
    , va.end()
    , boost::bind(&A::someFun, _1) == 42 );

vector<A>::const_iterator v1 = find_if(
    va.begin()
    , va.end()
    , boost::bind(&A::_value, _1) == 42 );

In case you do need to compose bind expressions (e.g. using a functor that cannot be expressed with the operators supported by boost::bind):

vector<A>::const_iterator v1 = find_if(
    va.begin()
    , va.end()
    , boost::bind(functor(), boost::bind(&A::someFun, _1), 42) );

which results in a call to functor::operator() with arguments as follow: the result of calling the member on the argument to the bind expression, and 42.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文