gpt4 book ai didi

c++ - (C++) 如何指向子类中的方法?

转载 作者:行者123 更新时间:2023-11-30 02:56:56 25 4
gpt4 key购买 nike

我有一个基类 Base ,它有方法 runUserMethod(void * pointer_to_method) .

class Base {
int runUserMethod(METHTYPE pointer_to_method) {
// do some stuff before
int retval = pointer_to_method();
// do some stuff after
return retval;
}
};

现在,我想实现 runUserMethod以一种能够运行由 Base 的子类实现的任何方法的方式,前提是这种方法遵循一些标准签名,例如 int <methodname> (void)

例如,假设用户创建类 UserClass喜欢:

class UserClass : public Base {
int user_method (void);
};

应该做什么METHTYPE是,以便我可以执行以下操作?

Base   * b = new UserClass();
int retval = b->runUserMethod(&UserClass::user_method);

此外,它会起作用吗?有没有更好的方法来做到这一点?基本上,我想做的是拦截对子类方法调用的调用,以对用户或多或少透明的方式。

最佳答案

这可以使用 std::function 来完成和 std::bind :

struct Base
{
typedef std::function<int()> METHTYPE;

int runUserMethod(METHTYPE pointer_to_method)
{
return pointer_to_method();
}
};

UserObject b;
auto func_object = std::bind(&UserObject::user_method, std::ref(b));

int retval = b.runUserMethod(func_object);

关于c++ - (C++) 如何指向子类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15071971/

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