0

在下面的代码中,我尝试通过 find_if 比较一个指针向量并确定其中包含一个成员 a == 5 (在这种情况下当然是两者,但它显示了我的情况)。但是它不编译。

#include <algorithm>

class obj
{
    public:
    int a = 5;
    int b = 2;
};

int main()
{
    obj A;
    obj B;
    std::vector<obj*> v = { &A, &B };

    std::find_if(begin(v), end(v), [](const (obj*)& instance) { if((*instance)->a == 5) return true; });
}

根据我在这里的解释,find_if 提供了实际的向量条目作为 lambda 函数的参数,该函数传统上通过 const ref 占用。但是我如何为指针指定这个,因为我有指针作为向量条目?

(对于冗长的错误消息,使用 gcc 11.1 将此代码带到 Godbolt,但我想这取决于我不知道如何正确指定 lambda 参数)

4

1 回答 1

2

您希望对指针有 const 引用,而不是对 const 指针的引用:

[](obj* const& instance) { if(instance->a == 5) return true; return false; }

或者使用 obj 指针的类型别名,它更清晰:

using PtrObj = obj*;
std::find_if(begin(v), end(v), [](const PtrObj& instance) { if(instance->a == 5) return true; return false; });
于 2021-10-05T08:01:21.910 回答