問題タブ [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.

0 投票する
1 に答える
171 参照

c++ - ステートメントは完全に無視されます (コンパイラによって省略されたかのように?)

さて、私はもう一度レンガを打ちました..再び、それが間違っている理由がわかりませんし、それを機能させる方法がわかりません:

クラスHumanのインスタンスがあります。HumanクラスはObjectから派生しています。Objectクラスには、「PerformStep」という仮想関数があります。Humanクラスは、この関数をオーバーロードします。 ヒューマンクラスにも「WalkAction」という機能があります。ここで、PerformStep - By メンバー関数ポインターの間に、この「walkaction」を呼び出したいと思います。
私はポインタでこれを行うのが好きです:
人間は愚かです: 彼らは歩き方を知っていますが、いつ. そのため、ステップ中に神のインスタンスが尋ねられます。「今何をすべきか」-そして、その神のインスタンスは正しいメンバー関数へのポインターを返します。

ヒューマン::ウォークアクション:

CALL_MEMBER_FN (マクロ):
CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))

問題は、プログラムをデバッグ モードで実行すると、関数ポインタのある行が完全に無視されることです。-ステートメントごとに実行すると、行を「ジャンプ」します。ウォークアクションにブレークポイントを配置すると、ブレークポイントに到達しません。特定の行にブレークポイントを配置すると、ブレークポイントは次の行に移動しますライン。

ここで何が起きてるの?

0 投票する
4 に答える
5447 参照

c++ - C++ でメンバ関数ポインタを渡す

QScriptEngine::FunctionSignature関数ポインター (型(= QScriptValue (QScriptContext *, QScriptEngine *))) を他の関数に渡そうとしています。しかし、渡す必要がある関数は、クラスのメンバー関数です。

私はこのように使用します:

この例では、エラーが発生します。

error: no matching function for call to QScriptEngine::newFunction(<unresolved overloaded function type>) note: candidates are: ...

print 関数を newFunction に渡すにはどうすればよいですか?

編集:

私は次のように修正しました:

0 投票する
1 に答える
1777 参照

c++ - メソッドポインタを「アップキャスト」して基本クラスポインタで使用しても安全ですか?

基本クラス メソッドのアドレスを保持できるポインター型があるとします。サブクラス メソッドのアドレスを割り当てて、正しく動作することを期待できますか? 私の場合、基本クラスのポインターで使用しており、オブジェクトの動的型は派生クラスです。

static_cast について話すとき、標準は次のように述べています。

5.2.9.9タイプ「タイプ cv1 T の D のメンバーへのポインター」の右辺値は、タイプ「タイプ cv2 T の B のメンバーへのポインター」の右辺値に変換できます。ここで、B は D の基底クラス (節 10) です。 「T 型の B のメンバーへのポインター」から「T 型の D のメンバーへのポインター」への有効な標準変換が存在し (4.11)、cv2 が cv1 と同じ cv-qualification、または cv1 より大きい cv-qualification である。63) null メンバ ポインタ値 (4.11) は、目的の型の null メンバ ポインタ値に変換されます。クラス B が元のメンバーを含む場合、または元のメンバーを含むクラスの基本クラスまたは派生クラスである場合、メンバーへの結果のポインターは元のメンバーを指します。それ以外の場合、キャストの結果は未定義です。[注: クラス B は元のメンバーを含む必要はありませんが、メンバーへのポインターが逆参照されるオブジェクトの動的型には、元のメンバーが含まれている必要があります。5.5 参照]

いつものように、私は基準を解読するのにとても苦労しています。大丈夫だと言っていますが、上記のテキストが私のコード例の状況に本当に当てはまるかどうかは100%確信が持てません.

0 投票する
3 に答える
1499 参照

c++ - C++ の関数ポインタ定義が機能しない

このエラーを解決できません: コード:

Visual Studio 2008 エラー C2470 で次のエラーが発生します: callme は関数定義のように見えますが、パラメーター リストはありません。見かけの体をスキップする`

編集: 私の考え: 1. クラス myClass でメンバー関数ポインターを作成したい 2. スコープ外で定義します。3. その関数ポインタをいくつかの Api 関数のパラメータとして渡します。

0 投票する
3 に答える
6864 参照

c++ - メンバー関数を関数ポインターに渡すにはどうすればよいですか?

メンバー関数を関数ポインターに渡すにはどうすればよいですか?次に、その関数ポインターを呼び出すにはどうすればよいですか?

0 投票する
1 に答える
836 参照

c++ - 操作のキュー

構成ファイルを処理するためのクラスを作成しています。私がそれを機能させたい方法は次のとおりです。

すべての操作 (データの挿入、データの消去など) を保持するキューがあり、メソッドCommitはそれらすべての変更を適用します。

私のプロトタイプは次のようになります (ファイルのすべての設定は STL マップに保存されます)。

それで、関数へのポインタのSTLキューを作成しようとしましたが、関数には同じ数の引数がなく、どうすればよいかわかりません...

0 投票する
4 に答える
1296 参照

c++ - メソッド ポインターを使用してスレッドを開始する

スレッドの抽象化 (Windows API の POSIX スレッドとスレッド) を開発しようとしていますが、関数ポインターではなくメソッド ポインターでそれらを開始できるようにしたいと考えています。

私がやりたいのは、純粋仮想メソッド「runThread」を持つクラスであるスレッドの抽象化です。これは、将来のスレッド化されたクラスに埋め込まれます。

Windows スレッドについてはまだわかりませんが、POSIX スレッドを開始するには、メソッド ポインターではなく、関数ポインターが必要です。そして、メソッドをインスタンスに関連付けて関数として機能させる方法を見つけることができません。おそらくキーワードが見つからないだけです(そして私はたくさん検索してきました)、それはBoost::Bind()が行うこととほぼ同じだと思うので、存在するに違いありません。

手伝って頂けますか ?

0 投票する
4 に答える
1209 参照

c++ - mem_funcと仮想関数

私は次のクラスを持っています:

次のコンパイルエラーが発生します:エラー:\ u2018mem_fun()\u2019の呼び出しに一致する関数がありません

なぜなのかご存知ですか?

0 投票する
2 に答える
282 参照

c++ - インスタンス化されたクラスのメンバー関数に関数ptrを取得しますか?

g.resize を 'void (*)(int, int)' にキャストできますか?

0 投票する
2 に答える
124 参照

c++ - 別のメソッドからマップ上のメソッドを呼び出す

そしてこのmain()

しかし、私がそれを実行すると、pは印刷されません。

私は何が間違っているのですか?

ありがとう