使用boost :: bind传递给boost函数的参数数量不匹配

时间:2016-02-02 08:21:22

标签: c++ boost-bind boost-function

我正在尝试使用boost函数和bind创建一个Functor,但是我只能将一个参数传递给目标函数,该函数有3个参数:

// Get session
session, err := mgo.Dial("localhost")
if err != nil {
    fmt.Printf("dial fail %v\n", err)
    os.Exit(1)
}
defer session.Close()

// Error check on every access
session.SetSafe(&mgo.Safe{})

// Get collection
collection := session.DB("test").C("people")

// Delete record
err = collection.Remove(bson.M{"name": "Foo Bar"})
if err != nil {
    fmt.Printf("remove fail %v\n", err)
    os.Exit(1)
}

错误说:

#include <boost/bind.hpp>
#include <boost/function.hpp>


template <typename Functor>
void foreach(Functor f) 
{
  int k;
  f(k);
}


class A
{
private:
void bar(int &a,int &b,int& c)
{}

void foo()
{
 int keys,predicate;
boost::function<void(int &,int&,int&)> functor_ ( boost::bind(
                &A::bar,
                this,
                boost::ref(keys),
                boost::ref(predicate),
                _1
                ));
 foreach(functor_);
 }

}; 

当然,我想只传递一个参数,因为我希望bind能够处理其他2个参数。我试图搜索我的错误,但我找不到(在短暂的电话中)。 能帮我找到问题吗? 感谢

1 个答案:

答案 0 :(得分:2)

您正在创建boost::function<void(int&, int&, int&)>,即函数,它带有三个参数。由于您正在使用bind并希望使用一个参数调用函数,因此它应该只是boost::function<void(int&)>