Visual Studio 2010 и повышение:: связать

У меня есть эта простая часть кода, который использует повышение:: свяжите:

#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.

8
задан Zack 19 February 2010 в 12:02
поделиться

2 ответа

Обновление:

Проблема в том, что make_pair кажется перегруженным в STL, который поставляется с VS2010 (этого не было в предыдущих версиях 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 .

3
ответ дан 6 December 2019 в 00:55
поделиться

Я думаю, вам просто нужен std::bind1st(&std::make_pair, false) std::bind1st(std::ptr_fun(&std::make_pair), false))

0
ответ дан 6 December 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: