0

我在 C++ 程序中使用 libuv。我有两个从 C 继承的 A 和 B 类。

我使用 libuv 并uv_signal_t在 C 上声明了一个实例。创建一个实例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 的源代码,但我不确定我是否想深入。

4

2 回答 2

0

我将添加一个函数指针作为我的类 C 的属性,并根据需要在派生类上实现它。更多在这里

于 2015-01-26T20:26:05.033 回答
-1

我认为您可以this在 lambda 中捕获指针,并通过它调用虚函数。然后可以在派生类中覆盖虚函数。

 const int32_t r = uv_signal_start(&this->signal, [this](uv_signal_t *handle, int signum){ return this->callback(); }, SIGABRT);
于 2015-01-26T00:49:56.027 回答