問題タブ [generics]
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.
.net - パラメータを使用して変数型をインスタンス化する洗練された方法はありますか?
これは合法ではありません:
これを行うには、Tの型オブジェクトを反映するか、Activator.CreateInstanceを使用する必要があります。どちらもかなり厄介です。もっと良い方法はありますか?
c++ - 一般的な方法でシーケンスを返すための C++ API
ライブラリを作成していて、一連の値を返す必要がある関数がある場合、次のようなことができます。
ただし、これには、ライブラリ ユーザーが使用したいコンテナーを使用できるようにするのではなく、std::vector<> コンテナーを使用する必要があります。さらに、パフォーマンスに悪影響を及ぼす可能性のある、返された配列の余分なコピーを追加する可能性があります (コンパイラがこれを最適化できるかどうかによって異なります)。
開始と終了 iter を取るテンプレート化された関数を作成することで、理論的には任意のコンテナーの使用を有効にする (そして不要な余分なコピーを避ける) ことができます。
関数は、反復子によって指定された範囲にシーケンス値を格納します。しかし、これの問題は、シーケンスのサイズを知る必要があるため、間に十分な要素がbegin
ありend
、シーケンス内のすべての値を格納する必要があることです。
次のようなインターフェースを考えました。
これは、 T_insertIter が挿入反復子 (たとえば、 で作成されたものstd::back_inserter(my_vector)
) である必要がありますが、コンパイラは非挿入反復子を喜んで受け入れますが、実行時に正しく動作しないため、これは誤用しやすいようです。
では、任意の長さのシーケンスを返すジェネリック インターフェイスを設計するためのベスト プラクティスはありますか?
c# - C# 'ジェネリック' タイプの問題
C# の質問 (.net 3.5)。フィールド ushort[,] ピクセルを持つクラス ImageData があります。独自の画像形式を扱っています。ImageData クラスは、コンストラクターでファイルの場所を取得し、ファイル拡張子をオンにしてデコード方法を決定します。一部の画像ファイルでは、ヘッダーに「ビット深度」フィールドがあります。ヘッダーをデコードした後、ピクセル値を「ピクセル」配列に読み込みます。これまでのところ、16bpp を超えたことはないので、大丈夫です。しかし、32bpp の場合はどうなるでしょうか。
私がやりたいのは、実行時にピクセルのタイプを決定することです。ヘッダーからビット深度を読み取った後、ピクセル データをメモリにコピーする前に、これを実行したいと考えています。何か案は?
c# - CollectionBaseから継承するクラスからジェネリックにリファクタリングする方法は?
私は約250,000行のコードであるアプリケーションに取り組んでいます。私は現在、元々.NET1.1で構築されたこのアプリケーションに取り組んでいる唯一の開発者です。全体に浸透しているのは、CollectionBaseから継承するクラスです。すべてのデータベースコレクションは、このクラスを継承します。代わりに、ジェネリックコレクションリストから継承するリファクタリングを検討しています。言うまでもなく、MartinFowlerのリファクタリングの本には提案がありません。このリファクタリングを試みる必要がありますか?もしそうなら、このリファクタリングに取り組むための最良の方法は何ですか?
はい、全体に単体テストがありますが、QAチームはありません。
c# - C# と VB にジェネリックがあるのはなぜですか? それらはどのような利点を提供しますか? ジェネリック、FTW
ウィキペディアから:
ジェネリック プログラミングは、アルゴリズムが後で指定される型に関して記述され、パラメーターとして提供される特定の型に対して必要なときにインスタンス化されるコンピューター プログラミングのスタイルであり、1983 年に登場した Ada によって開拓されました。使用時に操作する型のセットのみが異なる共通の関数または型。したがって、重複を減らします。
ジェネリックは、後で指定される型を定義する機能を提供します。項目は既に型指定されているため、項目を使用するために型にキャストする必要はありません。
C# と VB にジェネリックがあるのはなぜですか? それらはどのような利点を提供しますか? それらを使用してどのような利点がありますか?
他にジェネリクスを持つ言語は?
c# - C#で値のペア(トリプルなど)を1つの値として使用する最良の方法は何ですか?
つまり、値のタプルが必要です。
私の考えているユースケース:
また
Pair や Triple などの組み込み型はありますか? または、それを実装する最良の方法は何ですか?
更新回答で説明されている汎用タプルの実装がいくつかありますが、辞書でキーとして使用されるタプルについては、ハッシュコードの正しい計算をさらに検証する必要があります。それについての詳細は別の質問で。
更新 2ある値を辞書のキーとして使用する場合、それは不変でなければならないことも覚えておく価値があると思います。
java - Java Collections remove メソッドが一般的でないのはなぜですか?
Collection.remove(Object o)がジェネリック ではないのはなぜですか?
Collection<E>
できたようですboolean remove(E o);
Set<String>
次に、個々の文字列を から削除する代わりに(たとえば) 誤って削除しようとするCollection<String>
と、後でデバッグの問題ではなく、コンパイル時のエラーになります。
.net - .NET に一般的な同期キューがないのはなぜですか?
Queue.Synchronize を呼び出してスレッド セーフなキュー オブジェクトを取得できることに気付きましたが、Queue<T> では同じメソッドを使用できません。誰かが理由を知っていますか?ちょっと奇妙に思えます。
c# - linqはジェネリック関数の'select*'sqlに相当しますか?
linqクエリ('items')を受け取り、それを介して列挙してプロパティを追加するgeneric<>関数があります。アイテム自体ではなく、元の「アイテム」のすべてのプロパティを選択するにはどうすればよいですか(以下のコードのように)?
したがって、SQLと同等です:アイテムからFooとして*、'bar'を選択します