我在C ++程序中使用libuv。我有两个类,A和B继承自C。
我使用libuv并在C上声明了uv_signal_t
的实例。创建uv_signal_t
的实例需要传递回调。我可以很容易地将lambda传递给C函数来解决对静态成员函数的引用问题:
const int32_t r = uv_signal_start(&this->signal, [](uv_signal_t *handle, int signum){}, SIGABRT);
但是如何在每个子类上提供不同的回调实现?理想情况下,我在C.cpp上实现了一些通用代码,并且每个孩子都有其他代码。
更新
要清楚,我无法更改回调方法的签名,因为它是由libuv定义的。我可以编辑libuv的源代码,但我不确定我是否想要深入了解。
答案 0 :(得分:0)
我将一个函数指针作为属性添加到我的类C中,并在派生类上根据需要实现它。更多here。
答案 1 :(得分:-1)
我认为你可以在lambda中捕获this
指针,并通过它调用虚函数。然后可以在派生类中覆盖虚函数。
const int32_t r = uv_signal_start(&this->signal, [this](uv_signal_t *handle, int signum){ return this->callback(); }, SIGABRT);