問題タブ [covariant]

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 投票する
3 に答える
4906 参照

php - オブジェクトをそのサブクラスの1つ(共変リターンタイプ)に変換する適切なOOの方法は何ですか?

親クラスの戻り型のサブクラスを返す必要があるサブクラスがあります。これは共変リターン型と呼ばれていると思います。親クラスから子クラスに変換する最も簡単な方法を考えています。

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

arrays - Adaの配列は共変ですか?

私はJava配列が共変であることを知っています。したがって、たとえば:

私の質問は、Ada Covariantの配列ですか?

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

c++ - C++ はメンバー変数をオーバーライドします (std::vector)

これが私の質問のクラスです

まず、私が解決した問題についてお話したいと思います。彼らは他の人を助けるかもしれません。そして、私が正しいかどうかを確認できます^^

  1. 戻り値の型が異なる関数をオーバーライドできますか?
    Node* getNode(int index) は TransformationNode* getNode(int index) になりました

    はい、戻り値の型が共変である限り: http://www.tolchz.net/?p=33

  2. メンバーをオーバーライドできますか?

    オーバーライドについてはわかりませんが、派生クラスの同じ名前の変数は、基本クラスの変数を非表示にします

そして、私が本当にどうにかして回避したい問題があります

TransformationNode クラスでは、基本クラスから派生クラスへの多くの (IMHO) 回避可能な型キャストを行いました。mNodeList ベクトルのすべての要素が TransformationNodes であることは確かにわかっていますが、mNodeList を処理するには、それらを型キャストする必要があります。

継承は正しいです。つまり、TransformationNode は

ノードであり、mNodeList はノードの子ノードを保持し、型キャストされたバージョンのノードを保持する派生クラスにコピーを持つことはできません

。最後に、static_cast の方がコストがかかる場合は reinterpered_cast を使用することもできます。これらの操作の費用について教えていただけますか? それらは本当に大きなパフォーマンスの問題ですか?
assert (dynamic_cast)... ある種の予防策はすでに講じられています。



簡単に言うと、mGraph が実際には SceneGraph* であり、mNodeList が TransformationNode* を保持していることをコンパイラーに認識させたいと考えています。これにより、型キャストが失われるのを防ぐことができます。


お時間をいただきありがとうございます

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

c# - 可変数のジェネリック型パラメーターを渡す

具体的には、次のように使用できるエクスポート関数を作成します。

以下のコードのようなものを考えましたが、この場合、すべてを「オブジェクトのリスト」にキャストする必要がありますが、これは私が望むものではありません。

これを上品に解決するためのヒントを教えてください。

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

c++ - 非ポインタ/参照リターンタイプとの共変リターンタイプ

C ++(11)でコレクションクラスのような.NETフレームワークを実装しようとしています。私の問題は無効な共変型です。私はこれらのクラスを持っています:

私によると、これは素晴らしいです。しかし、C++で実装することは不可能に見えます。g ++で「無効な共変リターン型」を取得します。私が読んだ限り、問題は、GetEnumeratorがポインターまたは列挙子への参照のみを返し、列挙子自体のオブジェクトを返さない可能性があることです。

次のようなポインタを返さないようにしたいと思います。

発信者にわざわざ削除してほしくないからです。一時オブジェクトを使用すると、オブジェクトは不要になったため、自動的に削除されます。参照の使用はさらに悪い場合があります。

私は何かが足りないのですか?それとも、C ++標準(および言語)に大きな穴がありますか?本当にこういうことを成し遂げたいです。

前もって感謝します。

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

java - Java 列挙型の共変の戻り値の型

このサイトの別の質問で述べたように、次のようなものは合法ではありません。

これは、明らかに共変の戻り値の型が列挙型定数で機能しないためです (列挙型定数が列挙型のシングルトン サブクラスであるという錯覚を再び打ち破ります...)。

ここでは、3 つすべてがオブジェクトを返しClassますが、個々の定数は列挙型全体よりも「より具体的」です...

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

c++ - 多重継承による純粋仮想関数のオーバーロードと共変の戻り値の型

以前の質問を修正する必要があります。多重継承で作成される共変の戻り値の型に制限はありますか?

以下のコードは問題を示しています。IDFPin からのクラス IDFOutputPin 継承のコメントを外すと、タイプ Source のオブジェクトから IDFSourceNode インターフェイスを介して IDFOutputPin を取得しようとすると、コード全体が壊れます。質問 なぜこのようなことが起こっているのですか?テンプレートやそのようなミックスインを使い始めたばかりなので、おそらくそれにはいくつかの制限があるか、それともコンパイラの障害です - VS2010?

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

c++ - 仮想関数の戻り値の型

virtual として定義された基本クラスの純粋仮想関数がありますint GetData() const = 0

各派生クラスで列挙型を定義し、GetData 関数の戻り値 (派生クラス固有の列挙型) 値をオーバーライドしようとします。

例えば:

すべてのクラスのすべての列挙値に対して同じ範囲を定義することはできないと言うのは非常に重要です。上記のコードは、コンパイル エラーを生成します。

アドバイス - どうすれば解決できますか?

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

c++ - テンプレートベースのオブジェクトを返すメソッドを持つネストされたクラスでの「無効な共変の戻り値の型」エラー

次の C++ コードをコンパイルすると、これらのエラーが発生します。

コンパイルエラーは削除されますが、行virtual Q<B> test() {}を変更したくありません。virtual Q<A> test() {}この問題を解決する別の方法はありますか?