相关疑难解决方法(0)

Visual Studio 2010和boost :: bind

我有这个使用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));
}
Run Code Online (Sandbox Code Playgroud)

我在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
Run Code Online (Sandbox Code Playgroud)

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

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

澄清:代码在VS2008中编译.

c++ boost visual-studio-2010

8
推荐指数
1
解决办法
4567
查看次数

VS2010有boost :: bind问题吗?

我有以下代码行,它在2010年之前的g ++和Visual Studio下编译得很好.

std::vector<Device> device_list;

boost::function<void (Device&, boost::posix_time::time_duration&)> callback = 
  boost::bind(&std::vector<Device>::push_back, &device_list, _1);
Run Code Online (Sandbox Code Playgroud)

Device班级在哪里,没什么特别的.

现在我刚刚将我的Visual Studio版本升级到2010并且编译失败了:

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:\developments\libsystools\trunk\src\upnp_control_point.cpp    95
Run Code Online (Sandbox Code Playgroud)

发生了什么,我该如何解决这个问题?

谢谢.

c++ boost bind visual-studio-2010

5
推荐指数
1
解决办法
1699
查看次数

使用boost :: bind的std :: foreach

这有什么问题:

template <typename T>
std::list<T> & operator+=(std::list<T> & first, std::list<T> const& second)
{
    std::for_each(second.begin(), second.end(), boost::bind(&std::list<T>::push_back, first, _1));

    return first;
}
Run Code Online (Sandbox Code Playgroud)

编译很好,但不起作用.

c++ stl boost-bind

3
推荐指数
2
解决办法
2275
查看次数

Compactify C++函数调用语法

我想减少引用函数所需的语法量,并且想知道是否有办法做类似的事情:

(不可编译)

using pushToLastUsed = mSomeLongStackFIFOObject.push_back;
// or
auto pushToLastUsed = mSomeLongStackFIFOObject.push_back;
Run Code Online (Sandbox Code Playgroud)

然后我可以这样:

pushToLastUsed(10);
Run Code Online (Sandbox Code Playgroud)

代替:

mSomeLongStackFIFOObject.push_back(10);
Run Code Online (Sandbox Code Playgroud)

当然我可以制作一个像:

#define pushToLastUsed mSomeLongStackFIFOObject.push_back

// some code using it here

#undef pushToLastUsed
Run Code Online (Sandbox Code Playgroud)

但我不想使用宏.

c++ using

1
推荐指数
1
解决办法
102
查看次数

标签 统计

c++ ×4

boost ×2

visual-studio-2010 ×2

bind ×1

boost-bind ×1

stl ×1

using ×1