問題タブ [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 投票する
4 に答える
694 参照

c++ - メンバーの特性などへのポインタはありますか?

他の私の質問に基づいています。

次のコードを検討してください

テンプレート パラメータとしてvalue_typeandを使用できます。size

今、私はメンバーへのポインタで同じことをしたい:

しかし、私はエラーが発生します。

最後の行を機能させるには? または類似の結果を得る方法は?

ノート。私はそれがうまくいかないことを知っています。C++ 標準へのリンクは必要ありません。回避策が必要です。

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

c++ - メンバー関数のテンプレート化された引数からメンバー関数を呼び出す

私がコンパイルすることができない次のコードを考えると。

次のエラーメッセージが表示されます

。*を使用していると思いましたが、明らかに何か問題があります。

メンバー関数を呼び出すにはどうすればよいですか?

私はもう試した

どれもうまくいきませんでした。

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

c++ - 別のクラスのメンバー関数を使用したテンプレート割り当てを使用した C++ ポインター メンバー関数

別のクラスには、「send_to_shader」に送信したい IShaderParams* と関数のベクトルがあります。これらの関数の参照を次のように割り当てようとしています:

これは機能です:

そして、これは IshaderParams* を持つクラスです:

Visual Studio C++ Express 2008 でプロジェクトをコンパイルすると、次のエラーが表示されます。

エラー 2 エラー C2440: '=' : 'void (__thiscall TShader::* )(const D3DXVECTOR3 &,const std::string &)' を 'void (__thiscall TShaderParam::* )(const TParam に変換できません&,const std::string &)' c:\users\isagoras\documents\mcv\afoc\shader.cpp 127

課題はできますか?いいえ?方法がわからない :-S はい、他の手法でも同じ目的を達成できることはわかっていますが、これを行う方法を知りたい..

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

c++ - さまざまな方法で構造体メンバーにアクセスできるようにする方法

token位置、文、段落情報の開始/終了ペアを持つ構造が必要です。また、開始/終了ペアとして、および個別に、2つの異なる方法でメンバーにアクセスできるようにします。与えられた:

たとえば、次のように3つの/ペアdistance()のいずれかの間の距離を計算する関数を記述できます。startend

そしてそれを次のように呼びます:

posペアの距離を返します。しかし、私は合格することもできます&token::sent&token::para、それは私が望むことをします。したがって、機能は柔軟です。

ただし、ここで、たとえば、すべてまたはすべてまたはすべてのmax()最大値を計算する関数も記述したいと思います。pos.startpos.endsent.start

追加した場合:

私は次のような関数を書くことができます:

そしてそれを次のように呼びます:

ただし、上記のコメントに示されているように、ハードコーディングしたくありませんpos。、、、startまたはendのいずれかにアクセスできる柔軟性が必要です。これは、パラメータとしてに渡されます。possentparamax()

これを機能させるためにいくつかのことを試みましたが(ユニオン、匿名ユニオンなどを使用して試しました)、各値を1回だけ保存しながら、双方向の柔軟性を可能にするデータ構造を思い付くことができません。

私が欲しいものを手に入れることができるように構造体を整理する方法について何かアイデアtokenはありますか?


明確化を試みる

整数のペアの構造体が与えられた場合、2つの異なる方法でデータを「スライス」できるようにしたいと思います。

  1. 特定の開始/終了ペアのメンバーへのポインターを渡すことにより、呼び出された関数がどのペアを知らなくても任意のペアで動作するようにします。発信者がどちらのペアを決定します。
  2. int特定の(つまり、任意のペアの1つのみ )のメンバーへのポインターを渡すことにより、呼び出された関数が、どちらのペアまたはどちらのペアからのものであるかを知らなくても、任意の関数で動作します。呼び出し元は、どちらのペアを決定します。intintintintint

後者の別の例は、たとえば、すべてpara.endまたはすべてを合計することsent.startです。

また、重要なのは、上記の#2の場合、発信者の負担を軽減するために、メンバーへのポインターを1つだけ渡すのが理想的です。したがって、私はユニオンを使用して何かを理解しようとしています。

#2の場合、構造体は次のように最適にレイアウトされます。

秘訣は、何らかの形でtokentoken2オーバーレイするunionことですが、それが実行可能であり、アクセス可能な要件を満たしているかどうか/どのように実行できるかは明らかではありません。

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

c++ - 変更可能なメンバーへのポインタを作成するには?

次のコードを検討してください。

コンパイラはエラー メッセージを生成します。問題は、メンバーmが可変であるため、変更が許可されていることmです。しかし、関数シグネチャは変更可能な宣言を隠しています。

このコードをコンパイルするためにポインターから可変メンバーへのデカルを行う方法は? それが不可能な場合は、標準 C++ にリンクしてください。

0 投票する
5 に答える
16222 参照

c++ - クラス内でのメンバー関数ポインターの使用

クラスの例を考えると:

ポインタ「*func(foo、bar)」を介してメンバー関数を呼び出す行でコンパイラエラーが発生し、「termは2つの引数を取る関数に評価されません」と表示されます。私は何が間違っているのですか?

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

c++ - メンバー関数へのポインターの使用(および有用性)とメンバー関数の直接呼び出しについて

私はメンバー関数へのポインターに不慣れであり、それらの長所と短所を知りたいです。

具体的には、次のことを考慮してください。

コメントで述べられているように、コールバック(FireCallback)をトリガーするには、既存のVariableContainerオブジェクトへの参照が必要です。これは、の追加の引数として提供する必要がありますVariableContainer::AddVar (...)。今:

  1. メンバー関数へのポインターを使用する必要がありますか?または、直接呼び出す必要がありますかCallback (...)(オブジェクトへのポインターがあるためVariableContainer)?
  2. 各ソリューションの長所と短所は何ですか?

TIA、ジル

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

c++ - auto_ptr が op->*() をサポートしない理由

auto_ptr (shared_ptr も同様) は、それらの使用を可能な限り透過的にしようとします。つまり、理想的には、auto_ptr を使用しているか、オブジェクトへの実際のポインターを使用しているかを区別できないようにする必要があります。検討:

メンバーへのポインターを介してメンバー関数を呼び出そうとすると、違いがあります。auto_ptr は明らかに op->*() を実装していないからです。

auto_ptr で op->*() がサポートされていないのはなぜですか、またどのように実装するのでしょうか (私はしばらく実験しましたが、最終的にはあきらめました)。

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

c++ - メンバーの質問へのポインター

$4.11/2 州 -

B「型 cv のメンバーへのポインター」型の右辺値 ( はクラス型) は、「型cvのメンバーへのポインター」 の右辺値に変換できます。ここで、は の派生クラス (節 10) です。がアクセス不能 (節 11)、あいまい (10.2) または仮想 (10.1) の基底クラスである 場合、この変換を必要とするプログラムは形式が正しくありません。TBD TDBBD

B私の質問は、仮想基底クラスではないという制限があるのはなぜDですか?