問題タブ [stdany]
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++ - ポリモーフィックな動作を維持しながら、サブクラス内のさまざまな属性リストからデータに一般的にアクセスする
定数式、パラメーター パック、ラムダ、ムーブ セマンティクス、標準コンテナー、および std::any を使用すると、次のデザイン パターンを簡単に作成できます。
struct
これにより、またはclass
オブジェクトを定義する必要なく、プロパティまたは属性の任意のリストが作成されます。
簡単に言えば、次の方法で使用できます。
ここで、このコンテナー内のタイプ セーフなデータにアクセスするには、各要素の型を事前に知っておく必要があり、次の方法でそれらを抽出する必要があります。
わかりました、これは単純で十分に公平です...
ポリモーフィックな動作を保持するクラス階層内に、このような何らかのメカニズムを組み込みたいとしましょう...
クラス階層内で、すべての型の派生元となる抽象基本型が必要になる場合があります。各派生クラスまたはサブクラスには、その動作または状態を説明する一連のプロパティまたは属性が含まれる場合がありますが、各サブクラスには、さまざまなタイプのさまざまな量の属性が含まれる場合があります...
例えば:
さて、ここではポリモーフィックな動作、仮想、または純粋な仮想メソッドを示していません。これは、簡単に説明する質問の意図には必要ないためです...他のコード内の別の場所で、これらのオブジェクトが作成され、その後、人口...
十分に単純です... さて、上で述べたように、これらのベクトル内の値にアクセスするには、ある方法でその値を抽出するために使用するために、事前std::any
に知る必要があります。type
std::any_cast
type-safe
ファイルを解析してクラスのデータ型を作成し、それらのプロパティを設定するときにこれを使用することを計画しているとしましょう。次に、他の関数またはコードブロックのどこかで、これらの要素にアクセスする必要があり、それらのタイプが何であるかわかりません...std::any
このコンテキストでは、機能を提供したり、このプロセスを助けたりしません。
types
ユーザーが事前にわからず、type-safe
コンテキスト内でこれらの値にアクセスする必要がある場合、上記の現在の実装でこの取得または抽出プロセスを自動化する簡単な方法はありますか? そうでない場合、上記のコードを変更して意図したとおりに機能させるために何ができるか、またはこれの代わりに使用して、私が持っている動作を維持または提供しながら同様のデザインパターンを実装できる他のメカニズムまたは構造はありますか?表現?
c++ - std::any からの適切なハッシュ
std::any が格納するデータからハッシュを抽出する C++ の適切な方法はありますか? まあ、または少なくともバイトとその長さのリストの形式のオブジェクト
c++ - std::any と仮想関数で使用される CRTP
すべての欠点を持つ仮想関数を必要としないコンパイル時のポリモーフィズム設計を作成しようとしています。ただし、基本クラスのコンテナーに派生クラスを保持する機能をシミュレートできる、シンプルで効果的で理解しやすいコンテナーの作成に苦労しています。コンパイル時の可変引数ベクトルを使用した以前の試みは機能していましたが、コードは非常に混乱していました。このソリューションは私にはきれいに思えます。基本的な CTRP を実装する単純なコードがあります。ただし、std::any
オブジェクトを格納するランタイム コンテナを作成し、オブジェクトのタイプに基づいて、実行するアクションを定義できます。いくつか質問があります。
std::any
の使用とその後any_cast<>()
の使用は、仮想関数の使用と比較してパフォーマンスをどのように妨げますか?この状況で の使用は
std::any
有効ですか?そのようなコンテナを実装するより良い方法はありますか?
仮想関数を使用して (を使用して
virtual <type> foo() = 0
) 実装を強制する方法はありますか?CRTP ハンドラーになるオブジェクトを作成するのは良い考えですか? だから私はCRTP呼び出しのための関数を持っていませんが、それらの呼び出しを管理できるオブジェクトはありますか?
ありがとうございました。
基本クラスは次のとおりです。
実装は次のとおりです。
コンテナは次のとおりです。
主なものは次のとおりです。