問題タブ [pointer-to-member]

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 に答える
6821 参照

c++ - ポインターからメンバーへの使用時に、スコープ解決演算子を介してクラス メンバーのアドレスを取得する方法は?

メンバーへのポインター (AKA ドットスターまたはアロースター) を使用してクラスメンバーにアクセスする場合、次の構文を使用できます。

&A::n私の質問は、ステートメントがどのように機能するかです。

上記の例nでは変数です。メンバー変数の代わりにn関数があった場合 (そして、メンバーへのポインターの代わりにメンバー関数へのポインターを定義した場合)、クラスの関数は事実上静的である可能性があるため ( Nemo のコメント) を介して、クラスの関数のアドレスを見つけることができました&A::some_function。しかし、クラス スコープの解決を通じて非静的クラス メンバーのアドレスを取得するにはどうすればよいでしょうか。&A::n出力が単に であるため、の値を出力すると、これはさらに混乱します1

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

c++ - C++ のデータ メンバへのポインタの値

非常に奇妙な問題に遭遇しました。これの理由を知っている人はいますか? コードは Visual Studio 2012 でテストされています。

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

c++ - マップからメンバ関数へのポインタを回復できません

私のプログラムは、時系列情報を評価して特徴付けることです。データが持つ可能性がある約 90 の異なる信号があります。各信号には、独自の式と、パラメーターと値の個別のセットがあります。このコードとそれに関する私の問題は、構成ファイルからこれらの値をロードするためのものです。コンパイラはVS2010です。

各シグナルはクラスによって表され、ここではクラス TRI{} で示され、そのような各クラスはクラス SIGNAL{} から派生します。SIGNAL には静的マップが含まれています (私の実際のコードでは unordered_map を使用しています)。これは、シグナル名とパラメーター値をそれぞれの変数に割り当てるシグナルのメンバー関数へのポインターのペアを保持するためのものです。私の問題は、このメンバー関数を操作することです。

どうやら、このコード &TRI::load_cfg_vals 内のシグナルのメンバー関数のアドレスは、マップ sig_map に格納されることはありません。デバッガーからのようです。TRI シグナルのロード関数を呼び出そうとすると、関数ではないものを呼び出そうとしているとコンパイラが言います。私の失敗した試みのいくつかについては、コードを参照してください。

これをこれらのオブジェクトで動作させるにはどうすればよいですか? 何が問題なのか本当にわかりません。さらに悪いことに、STL や C++ の使用方法について何が理解できていないのかもわかりません。

(私はあきらめる準備ができています。代替の、より C に似たアプローチを検討しています。マップを使用して、各信号名を一意の整数に関連付けます (既に実際のコードで - それらはすべて一意の単一として表されます)。整数値がその要素の配列へのオフセットであるシグナルのロード関数のアドレスを使用して、void ポインターの配列の各要素をロードします. 私が選択した最初の方法である以下のコードは、維持しやすいように見えました.もう少しレベルが高い。)

これを投稿する前に私が研究した多くの質問と回答の中には、

メンバ関数ポインタと継承

文字列とメンバー関数ポインターの C++ マップ

メンバー関数への C++ ポインター

C++ const 関数からのマップを使用してメンバーへのポインターを呼び出す

ティア

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

c++ - タイプ名のメンバーへのポインター

このことを考慮:

2番目が失敗する理由と、1つのtypedefステートメントで目的のtypedefを取得する正しい方法は何ですか?

私のコンパイラは GCC-4.7.2 です。

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

c# - C# とメンバーへのポインター

特定のタイプのオブジェクトの関数を呼び出す必要がありますが、呼び出す関数を呼び出し元に指定してもらいたいです。

C++では、このようにメンバーへのポインターを使用できます

C#に相当するものはありますか?

関数の配列やスイッチのようなトリックはありません。関数の署名が要件を満たしている間に新しい関数が追加された場合でも、このソリューションが機能することを望みます。

編集:私が読んだように:デリゲートはC++関数ポインターに似ていますが、タイプセーフです。

しかし、メンバー関数ポインターが必要です。たとえば、私の関数では、特定のオブジェクトを取得します。

特定のタイプのプロパティを取得する必要があります。

しかし、私はこのようなものが必要です

この関数呼び出しに対してユーザーが要求した型を取得します。どの TypeX でなければなりませんか?

Type1..N には共通の基本クラスがあり、このクラスを使用する必要があります。

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

c++ - メンバーへのポインターと const メンバーへのポインターの間のキャスト

私はこれを検索しようとしましたが、私が考えるすべての用語は、まったく無関係な結果に終わります.

メンバーへのポインターをパラメーターとして受け取る関数 (テンプレート) がありますが、指しているメンバーを const として暗黙的に扱うことができないようです。const_cast の使用は機能しますが、可能であれば明示的に呼び出す必要は避けたいと思います。

これは、より複雑なクラス ツリーで私が抱えている問題を示す簡単な例です。呼び出し元のコード (たとえば、クラス テンプレートを使用する人) でキャストが必要になるため、キャストを回避しようとしています。


更新:これを最初に投稿したとき、同じエラーを生成しないコード サンプルを誤って使用しました。テンプレート引数に const 修飾子を追加しているという根本的な原因を特定するには、かなりの量のテストが必要でした。上記のサンプルは、私が使用している動作を適切に示しています。