使用boost :: function通过函数指针调用C ++类方法

时间:2015-05-29 05:19:07

标签: c++ boost

我想使用boost指向类方法的指针, 我在stackoverflow中看到了这个答案,它有一个使用boost的例子:

Calling C++ class methods via a function pointer

但是当我尝试添加更复杂的功能时,我不知道如何使用boost调用它: 如何以与调用bark1类似的方式调用bark2函数?

struct dogfood
{
    int aa;
};

class Dog
{
public:
    Dog(int i) : tmp(i) {}
    void bark()
    {
        std::cout << "woof: " << tmp << std::endl;
    }

    int bark2(int a, dogfood *b)
    {
        return(6);
    }
private:
    int tmp;
};

int main()
{
   Dog* pDog1 = new Dog (1);
   Dog* pDog2 = new Dog (2);

   //BarkFunction pBark = &Dog::bark;
   boost::function<void (Dog*)> f1 = &Dog::bark;

   f1(pDog1);
   f1(pDog2);
}

由于

1 个答案:

答案 0 :(得分:2)

使用

boost::function<int (Dog*, int, dogfood*)> f2 = &Dog::bark2;

并将其称为

f2(pDog2, 10, nullptr); // or pass the required pointer

BTW,在C ++ 11中,您只需使用std::function中的#include <functional>即可。或者,您可以使用std::mem_fn(也可以从C ++ 11开始),例如

auto f3 = std::mem_fn(&Dog::bark2);
f3(pDog2, 42, nullptr);

后者是一个指向成员指针函数的瘦包装器,应该比更“重”std::function的表现更好。