【发布时间】:2010-09-14 03:57:20
【问题描述】:
我有一个函数指针定义为:
typedef void (*EventFunction)(int nEvent);
有没有办法用 C++ 对象的特定实例来处理该函数?
class A
{
private:
EventFunction handler;
public:
void SetEvent(EventFunction func) { handler = func; }
void EventOne() { handler(1); }
};
class B
{
private:
A a;
public:
B() { a.SetEvent(EventFromA); } // What do I do here?
void EventFromA(int nEvent) { // do stuff }
};
编辑: Orion 指出了 Boost 提供的选项,例如:
boost::function<int (int)> f;
X x;
f = std::bind1st(
std::mem_fun(&X::foo), &x);
f(5); // Call x.foo(5)
不幸的是,Boost 对我来说不是一个选择。是否有某种可以用 C++ 编写的“currying”函数,它将指向成员函数的指针包装到普通函数指针中?
【问题讨论】:
-
是的,有一个 C++ 柯里化函数,称为 tr1::bind 或 boost::bind!是的,有一个用于保存咖喱结果的包装器。它被称为 tr1::function 或 boost::function。
-
有人可以使用 C++11 std::function 提供代码 sn-p 答案吗?我正在学习 C++,这让我感到困惑,因为我希望有这样一个基本的东西可用,但以下所有恢复为 boost 或 c++11 的答案实际上并没有提供代码 sn-p / howto .