参考静态成员函数&遗产

时间:2015-01-25 23:56:54

标签: c++ c++11 callback libuv

我在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的源代码,但我不确定我是否想要深入了解。

2 个答案:

答案 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);