gpt4 book ai didi

c++ - Visual Studio 2010 和 boost::bind

转载 作者:可可西里 更新时间:2023-11-01 17:58:03 30 4
gpt4 key购买 nike

我有一段使用 boost::bind 的简单代码:

#include <boost/bind.hpp>
#include <utility>
#include <vector>
#include <iterator>
#include <algorithm>

int main()
{
std::vector<int> a;
std::vector<std::pair<bool,int> > b;

a.push_back(1);
a.push_back(2);
a.push_back(3);

std::transform(a.begin(), a.end(), std::back_inserter(b),
boost::bind(std::make_pair<bool, int>, false, _1));
}

我在 VS2010 RC 中遇到了很多错误,例如:

Error   1   error C2780: 'boost::_bi::bind_t<_bi::dm_result<MT::* ,A1>::type,boost::_mfi::dm<M,T>,_bi::list_av_1<A1>::type> boost::bind(M T::* ,A1)' : expects 2 arguments - 3 provided c:\projects\testtuple\main.cpp  18  
Error 2 error C2780: 'boost::_bi::bind_t<Rt2,boost::_mfi::cmf8<R,T,B1,B2,B3,B4,B5,B6,B7,B8>,_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(boost::type<T>,R (__thiscall T::* )(B1,B2,B3,B4,B5,B6,B7,B8) const,A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 11 arguments - 3 provided c:\projects\testtuple\main.cpp 18

我做错了什么吗?如果这是编译器中的错误,我该如何解决?

编辑:添加了整个测试用例。

澄清:代码在 VS2008 中编译。

最佳答案

更新:

问题是 make_pair 似乎在 VS2010 附带的 STL 中过载(它不是在以前版本的 VS 或 GCC 中)。解决方法是通过强制转换明确您想要的重载:

#include <boost/bind.hpp>
#include <utility>
#include <vector>
#include <iterator>
#include <algorithm>


int main()
{
std::vector<int> a;
std::vector<std::pair<bool,int> > b;

a.push_back(1);
a.push_back(2);
a.push_back(3);

typedef std::pair<bool, int> (*MakePairType)(bool, int);

std::transform(a.begin(), a.end(), std::back_inserter(b),
boost::bind((MakePairType)&std::make_pair<bool, int>,
false, _1));
}

有关更多详细信息,请参阅 Boost bind manual .

关于c++ - Visual Studio 2010 和 boost::bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295969/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com