代码之家  ›  专栏  ›  技术社区  ›  Jens Luedicke

如何将boost::lambda与std::find_if一起使用?

c++
  •  9
  • Jens Luedicke  · 技术社区  · 15 年前

    我有一个std::vector,我想检查一个特定的属性 每个元素。somestruct具有属性“type”。我想检查这个属性 类型1或类型2。

    我的计划是使用boost::lambda。

    std::vector<SomeStruct>::const_iterator it =
        std::find_if(
            vec.begin(), vec.end(),
            _1.type == SomeStruct::Type1 || _1.type == SomeStruct::Type2);
    

    因为我需要访问每个元素的特定属性,所以我不确定是否可以 使用boost::lambda。

    有什么暗示吗?

    2 回复  |  直到 13 年前
        1
  •  10
  •   Mankarse    13 年前
    std::find_if(
        vec.begin(), vec.end(),
        bind(&SomeStruct::type, _1) == SomeStruct::Type1 ||
        bind(&SomeStruct::type, _1) == SomeStruct::Type2);
    
        2
  •  1
  •   Tadeusz Kopec for Ukraine yespbs    15 年前

    由于以下原因,无法编译表达式

    _1.type
    

    不能重载点运算符,因此表达式不能用作lambda表达式,它只是引用成员 type 对象的 _1 在boost::lambda.hpp中定义。嗯,我不知道是什么 Y1 类型和思考这个类型使我战栗-这不是为我们,凡人知道它-)。
    SEPP2K给出了正确的表达式。