如何使用find_if查找类的匹配对象? (或任何其他方式来实现结果)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用find_if查找类的匹配对象? (或任何其他方式来实现结果)相关的知识,希望对你有一定的参考价值。
我正试图遍历“刺激”类对象的向量。如果对象的属性符合条件,我希望返回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);
}
上面的代码给了我一个编译错误:必须使用'。'或' - >'调用指针成员函数.....我做错了什么?或者我应该采取哪些不同的方式来完全避免这种情况?
答案
你必须通过使用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&
)
另一答案
假设isNextPoint
被标记为static
,您需要明确限定它:
find_if(BS_stimulus_list.begin(),
BS_stimulus_list.end(),
StimulusCollection::isNextPoint)
如果它不是static
,你可以使用lambda表达式来将isNextPoint
的调用绑定到StimulusCollection
的特定实例。
以上是关于如何使用find_if查找类的匹配对象? (或任何其他方式来实现结果)的主要内容,如果未能解决你的问题,请参考以下文章