問題タブ [member-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++ - メンバー値へのポインターを型 (値ではない) ごとにテンプレート パラメーターとして使用する方法を追加する
私の状況:
1 つのフィールドをキーまたは ID と見なすことができる構造のベクトルが必要になることがよくありますが、高価なマップに格納するのではなく (このアプリではメモリ使用量が非常に重要です)、フラットなベクトルに格納したいと考えています。キーで要素を見つけるためのマップのようなインターフェイスを提供します。
この問題に対する私の最初の解決策:
KeyExtractor
これですべて機能しますが、型に埋め込まれたメンバー変数へのポインターを使用して、型の必要性をなくしたいと考えています。
しかし、私はこれを機能させることができません。手がかりのための実装を見てきましたがstd::mem_fn
、それを行う方法がわかりません。私が得るエラーは次のようなものです:
手がかりはありますか?
c++ - このタイプのテンプレート引数の意味は何ですか - `ClassAT::*ELEM`?
最近、侵入リストのコンテキストでこのコードに出くわしました。
ブースト侵入型リスト ライブラリ( member_hook<class T, class Hook, Hook T::* PtrToMember>
) にも同様のコードがあります。
私の質問は、テンプレート引数に関するものNode<T> T::*NODE
です。私は C++ の専門家ではありませんが、この特定の構文にこれまで出会ったことがなく、理解するために何を検索すればよいかわかりません。
どういう意味ですか?その目的は何ですか?「NODE は T に属するノードへのポインタです」と解釈する必要がありますか? T には事前に特定のメンバーが含まれていることがわかっておらず、私の知る限り、::
スコープを解決するために使用されるため、これは私には意味がありません。
同様に、誰かが*NODE
この行での使用を明確にすることができれば、たとえば : Node<T> *node = &(elem->*NODE);
、これが何のために使用されているかを理解するのに役立ちます.
c++ - C++:同じクラスの関数ポインタ メンバー (属性) にメソッドを割り当てることは可能ですか?
それが私がやろうとしていることです:関数ポインターであるメンバー(属性)を持つクラスがあります。クリエーターでは、同じクラスのいくつかのメソッドをそのポインターに割り当て (条件によっては)、他のメソッドで使用したいと考えています。例えば:
このコードを CodeBlocks でコンパイルすると、次のエラーが発生します。