使用Boost.Bind打印矢量元素

时间:2015-04-26 10:23:23

标签: c++ boost

我需要使用Boost.Bind打印插入到矢量中的值。 请在下面找到代码段:

请让我知道我在这里缺少什么?

   class Test
    {
        int i;

    public: 
        Test() {}

        Test(int _i)
        {
            i = _i;
        }

        void print()
        {
            cout << i << ",";
        }
    };


    int main()
    {
        std::vector<Test> vTest;
        Test w1(5);
        Test w2(6);
        Test w3(7);
        vTest.push_back(w1);
        vTest.push_back(w2);
        vTest.push_back(w3);

        std::for_each(vTest.begin(), vTest.end(),boost::bind(boost::mem_fn(&Test::print), _1, ?)); // How do I print Vector elements here?

    }

3 个答案:

答案 0 :(得分:1)

也许您不希望函数i使用参数print()?如果是这样,你应该这样做:

std::for_each(vTest.begin(), vTest.end(),boost::bind(&Test::print, _1));

这将输出如下内容:5,6,7,。请参阅live

如果您仍希望将某些参数传递给您的函数,则应将其传递给bind()

std::for_each(vTest.begin(), vTest.end(),boost::bind(&Test::print, _1, 0));

0将是Test::print()的论据。并且,如果您的代码,您将有下一个输出:0,0,0,。请参阅live

如果你将功能修复到下一个:

    void print(int i)
    {
        cout << this->i << " " << i << ",";
    }

输出将是下一个:5 0,6 0,7 0,。见live

答案 1 :(得分:1)

你可以不用像这样的提升来做到这一点

Hex::Hex(){//some implementation }

答案 2 :(得分:1)

你不需要在那里绑定。 只需使用以下语句替换代码中的for_each即可。

std::for_each(vTest.begin(), vTest.end(), std::mem_fn(&Test::print)) ;