我如何获得提振::绑定与数组下标工作?这就是我想要的目的。请指点。

[servenail:C ++ progs的] $克++ -v结果 从/usr/lib/gcc/i386-redhat-linux/3.4.6/specs点击阅读规格 与被配置:../configure前缀= / USR --mandir =的/ usr /共享/人--infodir =的/ usr /共享/信息--enable共享--enable线程= POSIX --disable检查--with系统用的zlib --enable -__ cxa_atexit --disable-libunwind的例外--enable-java的AWT = GTK主机= i386-红帽Linux的结果 线程模型:POSIX结果 gcc版本3.4.6 20060404(红帽3.4.6-3)

  

[servenail:C ++ progs的] $猫叔array_bind.cpp

#include <map>
#include <string>
#include <algorithm>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <iostream>

using namespace std;
using namespace boost;
using namespace boost::lambda;

class X
{
public:
    X(int x0) : m_x(x0)
    {
    }

    void f()
    {
        cout << "Inside function f(): object state = " << m_x << "\n";
    }

private:
    int m_x;
};

int main()
{
    X x1(10);
    X x2(20);
    X* array[2] = {&x1, &x2};

    map<int,int> m;
    m.insert(make_pair(1, 0));
    m.insert(make_pair(2, 1));

    for_each(m.begin(),
             m.end(),
             array[bind(&map<int,int>::value_type::second, _1)]->f());
}
  

[servenail:C ++ progs的] $克++ -o叔array_bind叔array_bind.cpp      叔array_bind.cpp:在功能`INT主()':       叔array_bind.cpp:40:错误:不对应的“操作符[]”中,点击   “阵列[助推::拉姆达::绑定(常量   ARG1&,常量Arg2所得&)[与ARG1 = INT   的std ::对:: *,Arg2所得=   提高::拉姆达:: lambda_functor>](((const的升压::拉姆达:: lambda_functor>&)(+升压::拉姆达:::: _ 1)))]'

非常感谢。

有帮助吗?

解决方案

正如Charles解释,升压::绑定返回一个功能对象和不是整数。函数对象将对于每个构件进行评估。一个小的辅助结构将解决这个问题:

struct get_nth {
    template<class T, size_t N>
    T& operator()( T (&a)[N], int nIndex ) const {
        assert(0<=nIndex && nIndex<N);
        return a[nIndex];
    }
}

for_each(m.begin(),
         m.end(),
         boost::bind( 
             &X::f,
             boost::bind( 
                 get_nth(), 
                 array, 
                 bind(&map<int,int>::value_type::second, _1) 
             )
         ));

编辑:我已经改变了仿函数返回该阵列的第n个元素。

其他提示

您的代码不编译的原因是因为boost::bind的返回值是的,可以用作数组下标整数类型。相反,boost::bind返回一个未指定的类型,可以使用操作者()被称为的实施方案定义的函数的对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top