我想使用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);
}
由于
答案 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
的表现更好。