gpt4 book ai didi

c++ - 在特定对象实例上调用 C++ 函数指针

转载 作者:IT老高 更新时间:2023-10-28 21:35:55 32 4
gpt4 key购买 nike

我有一个由以下定义的函数指针:

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”函数,它将指向成员函数的指针包装到普通函数指针中?

最佳答案

您可以使用函数指针来索引给定对象实例的 vtable。这称为 member function pointer .您的语法需要更改以使用“.*”和“&::”运算符:

class A;
class B;
typedef void (B::*EventFunction)(int nEvent)

然后:

class A
{
private:
EventFunction handler;

public:
void SetEvent(EventFunction func) { handler = func; }

void EventOne(B* delegate) { ((*delegate).*handler)(1); } // note: ".*"
};

class B
{
private:
A a;
public:
B() { a.SetEvent(&B::EventFromA); } // note: "&::"

void EventFromA(int nEvent) { /* do stuff */ }
};

关于c++ - 在特定对象实例上调用 C++ 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/151418/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com