0

C++ プログラムで libuv を使用しています。C を継承する A と B の 2 つのクラスがあります。

libuv を使用し、uv_signal_tC で のインスタンスを宣言しました。 のインスタンスを作成するにuv_signal_tは、コールバックを渡す必要があります。静的メンバー関数への参照の問題を回避するために、ラムダを 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ラムダでポインターをキャプチャし、これを介して仮想関数を呼び出すことができると思います。仮想関数は、派生クラスでオーバーライドできます。

 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 に答える