Как использовать find_if, чтобы найти соответствующий объект класса? (Или любым другим способом достижения результата) - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь пройти через вектор объектов класса "Стимул". И если свойства объекта соответствуют критериям, я хочу, чтобы объект 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);
}

Приведенный выше код дает мне ошибку компиляции: необходимо использовать '. ' или '-> ' для вызова функции указателя на член в ..... Что я делаю неправильно? Или что я должен сделать по-другому, чтобы избежать этого вообще?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вы должны указать экземпляр, используя лямбду (см. Ниже) или 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& для более старых версий)

0 голосов
/ 05 сентября 2018

Предполагая, что isNextPoint помечен static, вам необходимо явно указать его:

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

Если это не static, вы можете использовать лямбда-выражение , чтобы связать вызов isNextPoint с конкретным экземпляром StimulusCollection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...