0

コマンド シェルを実装する C ライブラリを使用しています。カスタム シェル コマンドは、次の呼び出しシグネチャを持つ関数を実装することによって登録されます。

typedef void(* shellcmd_t)(BaseSequentialStream *chp, int argc, char *argv[])

次に、次のように、文字列コマンド名をその関数ポインターにマップする静的構造にその関数を登録します。

static const ShellCommand commands[] = {
  {"myfunction", myfunction},
  {NULL, NULL}
}

myfunction は次のようになります。

void myfunction(BaseSequentialStream *chp, int argc, char *argv[])
{
   // do some stuff
}

私は C++ を使用しており、いくつかのシェル コマンドをクラス インスタンス メンバー関数 (静的メンバー関数ではない) として実装したいと考えています。<functional>クラス インスタンス メンバ関数から互換性のある関数ポインタを取得し、それを ShellCommand 構造体の配列に登録できるように、何かを使用する方法はありますか? 私はstd::bindとstd::functionについて読んでいて、Cスタイルの関数へのポインターを与えることができるという印象を受けていますが、Cスタイルの関数へのポインターを取得することはできませんうまくいかないように見えますが、何かが足りないだけかもしれません。

誰かがこの問題を解決するための良いアプローチを持っているなら、私はそれについて聞きたいです. 必要なインスタンスへのポインタ/参照を与える何かを呼び出すことができるフラットなC関数として実装する必要があるようです. ちょっと面倒なようで、もっと良い方法があることを望んでいました。

4

2 に答える 2