如何使用find_if查找类的匹配对象? (或任何其他方式来实现结果)

问题描述 投票:-1回答:2

我正试图遍历“刺激”类对象的向量。如果对象的属性符合条件,我希望返回Stimulus对象。

std::vector<Stimulus> BS_stimulus_list;

bool StimulusCollection::isNextPoint(Stimulus it){
if(it.GetPointDeg()=="(Some json value)" & it.GetEye()==currentEye){
    return true;
}
else{
    return false;
}

void StimulusCollection::NextBSStimulus(char e){
currentEye = e;
if (currentEye=='L'){
    vector<Stimulus>::iterator idx = find_if(BS_stimulus_list.begin(), BS_stimulus_list.end(),isNextPoint);
}

上面的代码给了我一个编译错误:必须使用'。'或' - >'调用指针成员函数.....我做错了什么?或者我应该采取哪些不同的方式来完全避免这种情况?

c++ vector lambda find pointer-to-member
2个回答
1
投票

你必须通过使用lambda(见下文)或std::bind来指定实例

void StimulusCollection::NextBSStimulus(char e) {
    currentEye = e;
    if (currentEye=='L'){
        vector<Stimulus>::iterator idx = find_if(
            BS_stimulus_list.begin(), 
            BS_stimulus_list.end(),
            [this](const auto& stimulus) { return isNextPoint(stimulus); });
    }
}

(对于C ++ 14,将旧版本的const auto&更改为const Stimulus&


1
投票

假设isNextPoint被标记为static,您需要明确限定它:

find_if(BS_stimulus_list.begin(), 
        BS_stimulus_list.end(), 
        StimulusCollection::isNextPoint)

如果它不是static,你可以使用lambda表达式来将isNextPoint的调用绑定到StimulusCollection的特定实例。

© www.soinside.com 2019 - 2024. All rights reserved.