問題タブ [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で定数関数ポインタの配列を宣言するにはどうすればよいですか?
次のように、関数へのポインターの配列を宣言する必要があります。
ただし、配列を定数として宣言する必要があります-配列内のデータとデータへのポインターの両方。残念ながら、const キーワードをどこに配置すればよいか思い出せません。
実際のポインター (この場合は MESSAGE_HANDLERS) は、配列として宣言されているため、既に一定であると想定しています。一方、配列内の関数ポインタは、示されているように宣言されている場合、実行時に変更できませんか?
c - Linuxカーネルで関数のポインタから関数の名前を取得する方法は?
Cで関数のポインタから関数の名前を取得する方法は?
編集:実際のケースは次のとおりです。Linuxカーネルモジュールを作成していて、カーネル関数を呼び出しています。これらの関数の一部はポインターであり、カーネル ソースでその関数のコードを検査したいと考えています。しかし、それがどの関数を指しているのかわかりません。システムが失敗すると(カーネルパニック)、現在のコールスタックと関数の名前が画面に出力されるため、それができると思いました。でも、私は間違っていたと思います... 私ですか?
java - Javaの関数ポインタ/デリゲート?
私のJavaゲームサーバーでは、基本的にパケットの目的をサーバーに伝えるパケットのアクションIDを送信します。各アクション ID (整数) を関数にマップしたいと考えています。スイッチを使わずにこれを行う方法はありますか?
c++ - ヒープに格納されたコードを vc++ から呼び出す
私がこのようなことをしていると想像してください:
関数であるかのように p を呼び出す関数ポインタを定義するにはどうすればよいですか? (私は VC++ 2008 Express を使用しています)。
ありがとう
c++ - クラスメンバー関数をコールバックとして渡すにはどうすればよいですか?
関数ポインターをコールバックとして渡す必要がある API を使用しています。クラスからこの API を使用しようとしていますが、コンパイル エラーが発生します。
コンストラクターから行ったことは次のとおりです。
これはコンパイルされません - 次のエラーが表示されます:
エラー 8 エラー C3867: 'CLoggersInfra::RedundencyManagerCallBack': 関数呼び出しに引数リストがありません。「&CLoggersInfra::RedundencyManagerCallBack」を使用して、メンバーへのポインターを作成します
使用する提案を試みましたが、&CLoggersInfra::RedundencyManagerCallBack
うまくいきませんでした。
これに対する提案/説明はありますか??
私はVS2008を使用しています。
ありがとう!!
c++ - C++、関数へのポインターとメンバー関数へのポインターの同等性?
私は、メンバー関数を通常の関数の特殊なケースとして考えることに慣れています。メンバー関数には、「this」ポインター、つまりメンバー関数が置かれるオブジェクトのパラメーターリストの先頭に追加のパラメーターがあります。行動することになっています。過去にこの方法で boost::function を使用しましたが、問題に遭遇したことはありません:
しかし、メンバー関数ポインターの次の構文を見てきました。
この構文では、'this' パラメータは表示されません。内部では、メンバーへのポインター関数は本当に別の獣であり、そのブーストは私のために詳細を処理していたのではないかと思いました。
「this」パラメーターの配置について標準は何を規定していますか? おそらく、私のコンパイラでは余分な 'this' 引数が最初に来て、他のコンパイラでは最後になるのでしょうか? 私の考え方がコンパイラ (GCC4、VS2005) の処理方法と一致しているのは幸運でしょうか? メンバー関数へのポインターは常に、追加のパラメーターを持つ関数へのポインターの特殊なケースにすぎませんか、それともコンパイラーはそれらを別の方法で実装できますか?
c++ - COMメソッドを関数の引数として渡す方法は? および Microsoft コンパイラ エラー C3867
関数の引数として COM メソッドを渡したいのですが、次のエラーが発生します (Microsoft (R) 32 ビット C/C++ 最適化コンパイラ バージョン 15.00.30729.01 for 80x86):
エラー C3867: 'IDispatch::GetTypeInfoCount': 関数呼び出しに引数リストがありません。「&IDispatch::GetTypeInfoCount」を使用して、メンバーへのポインターを作成します
私は何が欠けていますか?
どうもありがとうございました。
c++ - クラスメンバー関数の問題への関数ポインタ
まず第一に、私のプログラミングスキルはかなり限られていることを認めなければなりません。私は(本当に小さな)既存のC ++ OOPプロジェクトを引き継いで、自分のものを押し込もうとしました。残念ながら、私は自分の知識を超えた問題を経験しています。ここで助けを見つけたいと思います。私はカメラから画像を取得するためにサードパーティのライブラリ(変更できません)を使用しており、ここではいくつかのプレースホルダー名を使用します。
サードパーティのライブラリには、継続的なライブグラブを開始する関数「ThirdPartyGrab」があり、新しいフレームが到着するたびに呼び出される関数へのポインタを取得します。したがって、通常のCアプリケーションでは、次のようになります。
「HookFunction」は次のように宣言する必要があります。
または、次のように宣言されている「BUF_HOOK_FUNCTION_PTR」
これで、C++アプリケーションとクラス「MyFrameGrabber」ができました。これは私が行うすべてのことをカプセル化する必要があります。だから私は次のようなプライベートメンバーとしてフック関数を入れました:
また、私のクラスには、Grabを開始するパブリックvoid関数「StartGrab」があります。内部で私は電話しようとします:
これは(当然のことながら)失敗します。MyFrameGrabber :: HookFunctionの関数呼び出しで引数リストが欠落しているため、代わりに&MyFrameGrabber::HookFunctionを使用してポインターを作成する必要があると表示されます。ただし、代わりに「&MyFrameGrabber :: HookFunction」を渡すと、これをBUF_HOOK_FUNCTION_PTRに変換できないという別のエラーが発生します。
C ++ FAQ関数ポインタを読んだ後、私は問題を理解していると思いますが、解決策を作ることができません。フック関数を静的にしようとしましたが、これも変換エラーになります。フック関数をクラスの外に置くことも考えましたが、フック関数の中にクラス関数を使用する必要があります。別の方法はありますか、それともコンセプト全体を変更する必要がありますか?
編集14.01.08:サードパーティのライブラリを変更できず、voidポインターはフック関数内で使用されるデータ専用であるため、シングルトンの回避策をテストしました。残念ながら、思ったようにそのままでは機能しませんでした。静的関数を別のクラスに入れる必要があるかどうかわからないので、「MyFrameGrabber」クラスに入れました。
私のcppファイルには、call_hook関数があります。
しかし、これにより、static MatroxFrameGrabber _instance;
一致する標準コンストラクターが見つからないというエラーが発生します。MyFrameGrabberコンストラクターは次のようになっているので、これは正しいです。
空のコンストラクターを入れようとしましたMyFrameGrabber();
が、リンカーエラーが発生します。シングルトンでMyFrameGrabberコンストラクターに空のパラメーターを渡す必要がありますか?または、別のフッククラスが必要ですか?はいの場合、MyFrameGrabber関数にアクセスするにはどうすればよいですか?前もって感謝します。
2番目の編集15.01.08:変更を適用すると、コンパイルとリンクが行われます。残念ながら、これはDLLであり、Debug Caller Exeがまだなく、初期化中などに他の問題があるため、実行時にまだテストできません。これが正しい方法であると確信しているため、投稿を回答としてマークします。
java - Java のコールバック関数
Javaメソッドでコールバック関数を渡す方法はありますか?
私が模倣しようとしている動作は、.Net デリゲートが関数に渡されることです。
別のオブジェクトを作成することを提案している人を見てきましたが、それはやり過ぎのように思えますが、やり過ぎが唯一の方法であることを認識しています。
c++ - これを単純化できますか?
addFunction メソッドは関数を基本クラスのリストに追加します
。これを列挙してすべての関数を呼び出すことができます。
関数の追加を簡素化する (タイピング作業を減らす) 方法はありますか?