持つ方法私はクラスを持っている:ラップC++ Cメソッド
class C {
public:
int func1 (int arg1, int arg2) { return 1; }
float func2 (float arg1, float arg2) { return 2; }
} ;
私は、メソッドの関数func1とfunc2のためにCラッパー関数を作成し、void関数ポインタにキャストしたいと思います。
typedef void (*Function)(void);
typedef Function *FunctionPtr;
FunctionPtr functions[] = {
(FunctionPtr)&Wrap<&C::func1>::f,
(FunctionPtr)&Wrap<&C::func2>::f
};
た後、私はCの関数ポインタに戻ってそれらをキャストし、使用してできます。私は、様々なテンプレート魔法で実験されている
Class C c;
typedef int (*MyIntFunction)(C *c, int arg1, int arg2);
MyIntFunction *mif = (MyIntFunction *)functions[0];
int ri = (*mif)(&c, 1, 2);
typedef float (*MyFloatFunction)(C *c, float arg1, float arg2);
MyFloatFunction *mff = (MyFloatFunction *)functions[1];
float rf = (*mff)(&c, 1, 2);
を、これまでのところ、これを行うための正しい方法を発見していません。
Cでクラスをどのように宣言すると思いますか? –
データポインタへのキャスト関数ポインタ( 'void *')は未定義の動作です。 – StoryTeller
なぜこれをやりたいのですか?共有ライブラリを作成し、基礎となる 'C++ '実装への' C'インタフェースを必要としていますか? – Chad