当前位置:  开发笔记 > 编程语言 > 正文

如何使用参数/修改std :: foreach

如何解决《如何使用参数/修改std::foreach》经验,为你挑选了2个好方法。

我发现自己在写作

for(int i=0;iDoWhatever(param);

很多,我想把它压缩成一个foreach声明,但我不知道如何进入param那里而不会超级冗长.我也有类似的东西

for(int i=0;iIsOK())
      myvec[i]->DoWhatever(param);

我也想改写那个人.有什么想法吗?

哦,还有,由于各种原因,我不想使用提升.



1> Martin York..:
#include 
#include 
#include 

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      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)
                 );
}



2> Konrad Rudol..:

哦,还有,由于各种原因,我不想使用提升.

有效的决定,但很可能是错误的决定.将Boost视为STL的扩展.C++是一种库驱动的语言.如果你不考虑这一点,你的代码将质量低劣.

虽然std::for_each可以在这里使用,但是在C++ 0x之前缺少C++中的lambda表达式使得这很乏味.我主张使用Boost.ForEach!它使这容易:

foreach (yourtype x, yourvec)
    if (x.IsOK())
        x.Whatever();


可能想说你*不能*然后使用提升.说你不想*只是要求争论......;)
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有