問題タブ [member-function-pointers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - c++メンバー関数ポインタの問題
私はC++を初めて使用します。オブジェクトポインタとメンバー関数へのポインタについて知りたい。私は次のようなコードを書きました:
コード:
しかし、コンパイルすると、次の2つのエラーが表示されます。
私の質問は次のとおりです:
- このコードで何が間違っているのですか?
- オブジェクトポインタの作り方は?
- クラスのメンバー関数へのポインタを作成する方法とそれらを使用する方法は?
これらの概念を説明してください。
c++ - クラスデータメンバーの場合、メンバー関数へのポインタを呼び出す方法は?
上記のテストコードでpf
は、はのデータメンバーですB
。それを呼び出すための文法規則は何ですか?簡単なはずですが、適切に一致していません。たとえば、試してみるとobj.*pf(0,0);
、次のようになります。
c++ - テンプレート関数でオーバーロードされたメソッドにメンバー関数ポインタを渡す方法は?
このやや似た質問を参照しました。ただし、ここではシナリオが異なります。
上記のテスト コードでは、foo
内部に がオーバーロードされていA
ます。1 つしかなかっfoo
た場合、コードは正常に動作します。ただし、オーバーロードの場合、コンパイラは次のように文句を言います。
エラー: 「ReceiveFuncPtr(A&, [未解決のオーバーロードされた関数型])」の呼び出しに一致する関数がありません
を呼び出すときに明示的に型キャストする代わりに、そのパラメーターにいくつかの変更を加えて、同様のバージョンを常に受けReceiveFuncPtr()
取ることができるようにする方法はありますか?template
foo(int)
class A
編集:関数の呼び出し中に型を気にする必要はありません。ReceiveFuncPtr(obj, &A::foo);
それは次のように単純でなければなりtemplate
ません。
c++ - 別のクラスの関数ポインタを含むマップを持つクラス
私がやりたいのは、2番目のクラスの関数ポインターのマップを含むクラスを作成することですが、2番目のクラスの名前は重要ではありません(最初のクラスにハードコーディングすることはできません)。これはマクロを使用せずに。関数ポインターについてlearncpp.comの例に従いましたが、クラス間でそれらを渡すと、本当に迷子になります。私の試みは以下の通りです:
c++ - メンバー関数ポインターをTIMERPROCに変換する
TIMERPROC
メンバー関数ポインタをWINAPIで使用するタイプに変換するにはどうすればよいSetTimer
ですか?以下のコードスニペットは、私が現在それをどのように行っているかを示していますが、コンパイルすると、次のエラーが発生します。
エラーC2664:'SetTimer':パラメータ4を'void(__stdcall CBuildAndSend :: *)(HWND、UINT、UINT_PTR、DWORD)'から'TIMERPROC'に変換できません
コールバックは、元のクラスインスタンスに関連付ける必要があります。それを行うためのより良い方法があれば、私はすべての耳です。ありがとう。
c++ - コンパイラが私のコードでテンプレート引数を推測できないのはなぜですか?
私はビジュアルスタジオを使用していて、考えられるすべてのことを試しました。しかし、なぜこのコードがエラーを生成するのかわかりません。これが私のコードです。
そしてそれはこのエラーを生成します:
そして、パラメータxが関数内で初期化されているときに、次のようなエラーが生成されないのではないかと思います。
c++ - &MyClass::MyFunction使用時の未定義の参照リンクエラー
これは私を困惑させただけなので、私はここで質問すると思いました:
私は次のようなクラスを持っています:
それはヘッダーにあります。コンストラクター内
私がやったように。コンパイル時のエラーはありません。ただし、次のようにリンクすると、次のようになります。
私は得る:
これは意味がありません。私が特に奇妙に思うのは、それがリンカーエラーだということです。両方のオブジェクトファイルを含めました。
誰かが何が起こっているのか教えてもらえますか?関連性がある場合は、WindowsのMinGWを使用しています。
編集:
エピックは失敗します。cppファイルで関数を定義するときにMyClass::プレフィックスを忘れました。私はそれをチェックすることに決めませんでした。クラス定義の後にセミコリンを忘れるのとほぼ同じくらい悪いです。
c++ - c++:boost::bind を使用してメンバー関数を期待される関数ポインター シグネチャに変換できますか?
関数ポインタをメソッド呼び出しに渡すサードパーティ ライブラリを使用しています。
通常の使用方法は次のようになります。
次に、continueAfterOPTIONS メソッドをクラスのメンバー関数にしたいと思います。通常、boost::bind を使用してこれを行います。
その結果
関数の引数にプレースホルダーを追加しようとしましたが、違いはありませんでした。私がやろうとしていることは可能ですか?おそらくバインド結果をキャストする方法はありますか?
ありがとう!
c++ - 仮想関数への C++ ポインター
このような構造体がある場合
そして、このような参照
func
次のように、そのメソッドへのポインターを取得できます。
そのメソッドが仮想で、実行時にそれが何であるかわからない場合はどうなるでしょうか? なぜこのようなポインターを取得できないのですか?
そのメソッドへのポインターを取得することは可能ですか?
c++ - create_pthread()呼び出しのメンバー関数をキャストします
警告を止めたい
server.cpp:823:警告:'void *(ClientHandler :: )()'から'void()(void)'に変換しています
通話中:
ここhandle()
で、のメンバー関数は次のClientHandler
とおりです。
コンパイラからの関数型メッセージを解読するのに苦労しています。
質問は:
handle()
インターフェイスを変更する必要がありますか?全体的にキャストを取り除くことはできますか?- キャストを変更する必要がありますか?正確には何に?
- 何か完全に違う?