問題タブ [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++ 関数ポインターとクラス
私が持っているとしましょう:
static
レンダリングに使用する関数が関数またはメンバー関数である限り、これは問題ありません。
ただし、ほとんどの場合、レンダリング関数はメンバー変数にアクセスする必要があり、クラス インスタンスをグローバルにしない方がよいため、クラス メソッドも使用できるようにしたいと考えています。
ただし、これを行う方法がまったくわかりませんが、関数とstatic
メンバー関数を使用できるようにしています。
c++ - メンバー関数へのポインターとスイッチを使用するコストはいくらですか?
次のような状況があります。
私の現在の実装whichFoo
では、コンストラクターのデータ メンバーに inの値を保存し、 switch
inを使用してcallFoo()
、どの foo を呼び出すかを決定します。または、コンストラクターでa を使用して、で呼び出されるswitch
右側へのポインターを保存することもできます。fooN()
callFoo()
私の質問は、クラス A のオブジェクトが一度だけ構築さcallFoo()
れ、非常に多数回呼び出される場合、どの方法がより効率的かということです。したがって、最初のケースでは、switch ステートメントが複数回実行されますが、2 番目のケースでは、switch が 1 つしかなく、そのポインターを使用してメンバー関数が複数回呼び出されます。ポインターを使用してメンバー関数を呼び出すと、直接呼び出すよりも遅いことがわかっています。このオーバーヘッドが のコストより多いか少ないかは誰にもわかりswitch
ませんか?
明確化: どのアプローチがパフォーマンスを向上させるかは、実際に試して時間を計るまでわからないことを認識しています。ただし、この場合、既にアプローチ 1 を実装しており、アプローチ 2 が少なくとも原則としてより効率的であるかどうかを調べたいと考えていました。それが可能であるように思われ、今ではわざわざそれを実装して試してみるのは理にかなっています.
ああ、私は審美的な理由からアプローチ 2 の方が好きです。私はそれを実装する正当な理由を探していると思います。:)
java - Javaの関数ポインタの最も近い代替物は何ですか?
約 10 行のコードのメソッドがあります。コードの 1 行を変更する小さな計算を除いて、まったく同じことを行うメソッドをさらに作成したいと考えています。これは、関数ポインターを渡してその 1 行を置き換えるのに最適なアプリケーションですが、Java には関数ポインターがありません。私の最良の代替手段は何ですか?
c - Cの関数ポインタを使用して関数を呼び出すことはできますか?
関数ポインタを使用して関数を呼び出すことはできますか?はいの場合はどうですか?
c - 関数ポインターの配列を使用するにはどうすればよいですか?
Cで関数ポインタの配列をどのように使用すればよいですか?
どうすれば初期化できますか?
design-patterns - TCL には関数ポインタの概念がありますか?
TCL を使用しており、 Strategy Patternのようなものを実装したいと考えています。TCL関数で出力を印刷するための「戦略」を渡したいので、画面への印刷とログファイルへの印刷を簡単に切り替えることができます。TCLでこれを行う最良の方法は何ですか?
c++ - C の関数ポインタ - アドレス演算子「不要」
C で qsort を使用して、比較関数を渡します。
qsort のプロトタイプは a を期待するint (* )(const void* , const void*)
ので、次のように呼び出します。
ただし、次の呼び出しも同様に有効です。
これは、C++ で静的メンバー関数を渡した場合に行う必要があることです。Kernighan & Ritchie (第 2 版、5.11「関数へのポインター」p119) は、「[cmp] は関数であることがわかっているため、& 演算子は、配列名の前に必要ないのと同様に、必要ありません。 "
他の誰かがこれに少し不快に感じますか (特にタイプセーフに関して)?
c - 関数へのポインタに対するコンパイラのサポートが壊れている場合、どのようにディスパッチャを作成すればよいですか?
コマンド インターフェイスを介してデバイスを制御する組み込みアプリケーションに取り組んでいます。私は VC でコマンド ディスパッチャーを嘲笑し、満足のいく動作をさせました。しかし、コードを組み込み環境に移したとき、コンパイラーの関数へのポインターの実装が壊れていることがわかりました。
これが私が最初にコードを実装した方法です(VCで):
関数ポインターを使用しない場合、私の唯一の望みは、switch()/case ステートメントを使用して関数を呼び出すことです。しかし、大きな switch() ステートメントを手動で維持する必要は避けたいと思います。
私が考えていたのは、すべての COMMAND_ENTRY 行を別のインクルード ファイルに移動することです。次に、そのインクルード ファイルをさまざまな #define および #undefines でラップします。何かのようなもの:
この状況を処理するためのより良い方法を見ている人はいますか? 残念ながら、「別のコンパイラを入手する」という選択肢はありません。:(
--- 編集して追加: 明確にするために、特定の組み込み環境は、コンパイラが「関数ポインタ テーブル」を作成することになっているという点で壊れています。これは、ポインタを介して関数への呼び出しを解決するためにコンパイラによって使用されます。残念ながら、コンパイラは壊れており、正しい関数テーブルを生成しません。
そのため、関数アドレスを抽出して呼び出す簡単な方法がありません。
--- 編集 #2: ああ、はい、void *(set|get)_dispatcher の使用は、func ポインターの typedefine に問題があるかどうかを確認するための私の試みでした。もともと、持っていた
c - far 関数ポインターの使用
far はコンパイラ固有であることは理解していますが、ポインターを本当に理解している人にとっては far 指定子の配置が意味を成すはずだと期待しています。
したがって、プロセッサのメモリ空間全体を共有する 2 つのアプリケーションがあります。
アプリ A は、アプリ B に存在する関数 foo を呼び出す必要があります。
関数 foo のメモリ位置はわかっています。
したがって、これはアプリ A で機能するはずです。
- __far は typedef の適切な場所にありますか?
- (MYFP) キャストに __far を追加する必要がありますか?
- いくつかの情報は、foo への呼び出しを逆参照する必要がないことを示唆しています。あなたの経験は何ですか?
これについて他に何が間違っているように見えますか、またはこれを達成しようとする可能性がありますか?
これを行うより良い方法はありますか?
編集:
これは、Code Warrior を使用する組み込みデバイス (Freescale S12XEQ デバイス) にあります。これは 24 ビットのメモリ空間を持つ 16 ビット デバイスなので、セグメント化/バンク化されています。
-アダム
python - Pythonの関数ポインタ
私は次のようなことをしたいと思います:
Pythonでは、関数ポインタのようなものを割り当てることは可能ですか?