我发现自己在写作
for(int i=0;i<myvec.size();i++)
myvec[i]->DoWhatever(param);
很多,我想将它压缩成一个 foreach
语句,但我不知道如何在其中获取 param
而不会过于冗长.我也有类似的东西
for(int i=0;i<myvec.size();i++)
if(myvec[i]->IsOK())
myvec[i]->DoWhatever(param);
我也想重写那个人。有什么想法吗?
哦,还有,由于种种原因,我不想用boost。
最佳答案
#include <vector>
#include <algorithm>
#include <functional>
class X
{
public:
void doWhat(int x) {}
bool IsOK() const {return true;}
};
class CallWhatIfOk
{
public:
CallWhatIfOk(int p): param(p) {}
void operator()(X& x) const
{ if (x.IsOK()) {x.doWhat(param);}}
private:
int param;
};
int main()
{
std::vector<X> myVec;
std::for_each( myVec.begin(),
myVec.end(),
std::bind2nd(std::mem_fun_ref(&X::doWhat),4)
);
std::for_each( myVec.begin(),
myVec.end(),
CallWhatIfOk(4)
);
}
关于c++ - 如何使用带有参数/修改的 std::foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/476488/