g.resizeを 'void(*)(int、int)'にキャストできますか?インスタンス化されたクラスのメンバ関数にptr関数を取得しますか?
答えて
gfx::resize
は、void(gfx::*)(int, int)
である。あなたはタイプgfx
のオブジェクトのメンバ関数としてしか呼び出せないので、それを意味のある形でvoid(*)(int, int)
に変換することはできません。
メンバ関数は、だけなので、あなたのgfx g;
与え、あなたはg.resize()
を呼び出すことができますが、それは普通の関数だったようにあなただけのresize()
を呼び出すことはできません、クラスのインスタンスで呼び出すことができます。通常の関数ポインタは、クラスのインスタンスに関数呼び出しをバインドする方法がないため、メンバ関数を指すことはできません。
概念的には、メンバー関数は、呼び出されたクラスのインスタンスを指す追加のパラメータthis
を引数としてとります。
通常の関数ポインタを介してメンバ関数を呼び出せるようにするには、オブジェクトのインスタンスを渡すことができるパラメータを持つ非メンバ関数(または静的メンバ関数)ラッパーを作成できます。メンバ関数を呼び出す。たとえば、あなたが持っている可能性があり:
void resize(gfx* obj, int x, int y) {
return obj->resize(x, y);
}
をこの非会員resize
機能はvoid(*)(gfx*, int, int)
型を持つ非メンバー関数として呼び出すことができます。このアプローチの一般化された形式は、std::function
とstd::bind
の施設がC++ 0xにあります(BoostとC++ TR1でも見つけることができます)。
'void(*)(int、int)'には 'this'ポインタがありません。どのタイプ/インスタンスを実行するかを指定する必要があるため、署名も変更する必要があります。 –
@メーリン:そうではありませんか? –
はい。その日、私はその "メンバ関数"が "this"ポインタを取得することはありませんでした。それは私がそれを理解するために「これ」について明白なチュートリアルを読んでくれました。 Btw、私はupvoteでした。 –
はい、あなたはそれを行うことができます。
void easy_resize(int x, int y) { g.resize(x, y); }
私は今どのようにそれをやっているのですか?しかし、私は少しハッキーのように見える私のグラフィックスクラスへのポインタを追跡する必要があります –
何のグラフィックスクラスが必要ですか?それをクラスにする必要がありますか?場合によっては、(クラスのメンバー関数ではなく)関数を持つだけでよい場合もあります。 –
- 1. クラスのメンバ関数
- 2. まだインスタンス化のないクラスの関数のハンドルを取得します
- 3. オーバーロードされた関数テンプレートのインスタンス化
- 4. オーバーロードされたメンバ関数の関数ポインタを渡しますか?
- 5. クラスのインスタンスからメンバ関数をオーバーロードする方法
- 6. メンバ関数を返す/取るインスタンス変数
- 7. 別のクラスのメンバ関数内でメンバ関数からスレッドを開始
- 8. Swift - 関数から返された型からクラスをインスタンス化する
- 9. 関数ポインタからメンバ関数を初期化する
- 10. Java:インスタンス化のためにクラスを関数に渡す方法
- 11. Fantomクラスのメンバにコンストラクタit-blockのメンバ関数からアクセスしますか?
- 12. メンバ関数ポインタをインスタンス化する方法は?
- 13. CUDA:クラス関数をクラスのメンバとする関数にポインタを渡す
- 14. メンバ関数のメンバ変数を初期化する
- 15. 仮想関数クラスのメンバ関数内で呼び出し
- 16. 非仮想オーバーロードされたメンバ関数
- 17. メンバ関数&constメンバ関数ポインタ控除
- 18. メンバ関数をメンバ関数のパラメータとして渡す
- 19. メンバ関数を関数ポインタに渡す
- 20. 数回インスタンス化された関数テンプレートへのポインタ
- 21. constexprメンバ関数を使用したconstexprメンバ変数の初期化
- 22. メンバ関数が継承され変更されません基底クラス変数
- 23. 渡すクラスのメンバ関数::スレッド
- 24. ネストされた関数の引数として渡される関数の名前を取得します。R
- 25. オーバーロードされたテンプレート関数をインスタンス化できません
- 26. クラスの外部のメンバ関数でメンバ関数をどのように呼び出すのですか?
- 27. インスタンス化されたオブジェクトを返すPowershell関数...種類の?
- 28. 親クラスのメンバ関数への関数ポインタ
- 29. インスタンス化されたオブジェクトを関数外で削除しますか?
- 30. メンバ関数から別のメンバ関数にconstパラメータを渡すには?
をあなたがやろうとしているかを説明する場合は、おそらく我々は動作しますいくつかの代替案を提案することができます。 –
GLFWのサイズ変更コールバックを自分のグラフィックスクラスにラップします –