VxWorks アプリケーション用の C++ を書いています。VxWorks は C ベースであるため、関数ポインターを引数として受け取る関数は、C++ のメンバー関数ポインターと互換性がありません。
SomeClass
のような関数に渡すことができるようにしたい 30 以上のメンバー関数で数回インスタンス化されるクラス ( ) がありますtaskSpawn
。これを実現する2 つの方法を知っていますが、どちらの従来のソリューションも特に好きではありません。
静的関数を使用して、特定のオブジェクトで C 関数ポインターを呼び出します。
static void CallFunction1(SomeClass *objectToCallFunction1On); static void CallFunction2(SomeClass *objectToCallFunction2On); ... static void CallFunction30(SomeClass *objectToCallFunction30On); void Function1(); void Function2(); ... void Function30();
整数型または列挙型を使用して、特定のオブジェクトで呼び出す関数を指定します。
static void CallFunction(SomeClass *objectToCallFunctionOn, int functionToCall); void Function1(); void Function2(); ... void Function30();
私は本当に、これらのソリューションの両方が本当に嫌いです。この問題に対するクリーンでシンプルな解決策はありますか?