1

我想将包含的所有整数复制ab.

#include <vector>
#include <iterator>
#include <boost/bind.hpp>
#include <boost/range/algorithm/for_each.hpp>
#include <boost/range/algorithm/copy.hpp>
void test()
{
        std::vector<std::vector<int> > a;
        std::vector<int> b;
        boost::for_each(a, boost::bind(boost::copy, _1, std::back_inserter(b)));
}

它看起来很简单。我想要一个兼容 C++ 98 的一个班轮。

为什么不编译?我有一长串关于 的错误boost::bind,我不明白,而且它有好几页。

错误开始于:

错误 C2780: 'boost::_bi::bind_t<_bi::dm_result::type,boost::_mfi::dm,_bi::list_av_1::type> boost::bind(MT::* ,A1)' :需要 2 个参数 - 提供 3 个

4

1 回答 1

1

这里有一个直接相关的问题:Can I use (boost) bind with a function template?. 该问题中的错误消息是相同的,问题不同在于它们的模板函数不是库函数。

这里的技巧是您打算绑定一个模板函数boost::copy<>(),根据链接的问题,这是不可能的,因为必须实例化模板函数才能作为函数指针传递。这也在此处的“绑定模板函数”部分中进行了说明。因此,不幸的是,您需要使用一个相当长的构造,可以通过使用稍微缩短它typedef(因为您使用的是 C++98,所以也没有decltype可用的):

int main()
{
        typedef std::vector<int> IntVec;
        std::vector<IntVec> a;
        IntVec b;
        boost::for_each(a,
            boost::bind(boost::copy<IntVec,
            std::back_insert_iterator<IntVec> >, _1, std::back_inserter(b)));
}
于 2016-02-24T17:37:01.713 回答