問題タブ [generic-programming]
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++ - テンプレートはどこで役に立ちますか?
私の職場では、 iostream、string、vector、map、および奇数アルゴリズムまたは 2 つを使用する傾向があります。テンプレート手法が問題の最善の解決策である状況は、実際にはあまり多くありません。
ここで私が探しているのは、アイデアと、必要に応じて、実際に遭遇した問題に対する新しいソリューションを作成するためにテンプレート手法をどのように使用したかを示すサンプル コードです。
賄賂として、あなたの回答に対する賛成票を期待してください。
haskell - Haskell で汎用プログラミングを行うにはどうすればよいですか?
C++ から来た私には、ジェネリック プログラミングが不可欠であることがわかりました。Haskell では、人々はどのようにそれに取り組んでいるのだろうか?
Haskell で汎用スワップ関数を記述する方法を教えてください。
Haskell に部分的な特殊化の同等の概念はありますか?
C++ では、O(1) コンテナー スワップ用の特別な swap メソッドを持つ汎用 map/hash_map コンテナー用の特別な関数を使用して、汎用 swap 関数を部分的に特殊化できます。Haskell でそれを行う方法、または Haskell でのジェネリック プログラミングの標準的な例は何ですか?
c - 純粋なCでの「多目的」リンクリストの実装
これは厳密には技術的な質問ではありません。Cが必要なことを実行するのに十分なことを知っているので(つまり、「言語を邪魔させない」という意味で)、この質問は基本的に「どの方向」です。質問をします。
状況は次のとおりです。私は現在、高度なアルゴリズムコースを受講しています。「プログラマーとして成長する」ために、純粋なCを使用して実際の割り当てを実装する必要があります(うまく機能します。実際に行う小さな間違いはほとんどありません。あなたはそれを修正するためにあなたがしていることを完全に理解する)。実装の過程で、私は明らかに「基本的な」データ構造をゼロから実装しなければならないという問題に遭遇します。実際には、リンクリストだけでなく、スタック、ツリーなども含まれます。
このトピックのリストに焦点を当てています。これは通常、プログラムで「メイン」構造として、または他の大きな構造(たとえば、解決するハッシュツリー)の「ヘルパー」構造として多く使用する構造だからです。リンクリストを使用して競合します)。
これには、リストにさまざまなタイプの要素が格納されている必要があります。ここでは、すべてのタイプのリストを再コーディングしたくないという前提として想定しています。だから、私はこれらの選択肢を思い付くことができます:
- voidポインタのリストを作成する(ちょっとエレガントではない;デバッグが難しい)
- リストを1つだけ作成しますが、 「要素タイプ」として結合を持ち、プログラムで使用するすべての要素タイプを含みます(デバッグが簡単です。要素がすべて同じサイズでない場合はスペースを浪費します)
- プリプロセッサマクロを使用して、SGLIBのスタイルですべてのタイプのコードを再生成します。コードは本当に劇的になる可能性があります)
- あなたのアイデア/解決策
質問を明確にするために:上記のどれが最良ですか?
PS:私は基本的に学術的な文脈にいるので、業界で純粋なCを使用している人々の見方にも非常に興味があります。私は、ほとんどの純粋なCプログラマーが組み込みデバイスの分野にいることを理解しています。そこでは、私が直面しているこの種の問題は一般的ではないと思います。しかし、「現実の世界で」それがどのように行われているのかを誰かが知っているなら、私はあなたの意見に非常に興味があります。
computer-science - プログラマーが就職するのに最適な学部のコンピュータ サイエンス コースはどれですか?
ここでのアイデアは、大学を卒業してすぐに優れたプログラマーを獲得することです。
アルゴリズムは、自分で簡単に習得できるものではなく、ソフトウェアの効率と正確性をより深いレベルで見ることができると思います。
また、実際のプログラミングを教えることも役立つと思いますが、プログラミングについて学んだことのほとんどは職場で学んだので、プログラミング コースのブロックの一部 (すべてではない) をもっと有効に活用できたと思います。
これらの結果は、私が通っていた学校の CS 部門に書きたいと思っている手紙の一部になります。
c++ - ジェネリック プログラミング/メタ プログラミングをいつ/なぜ (あるとすれば) 考えるべきか
私見おっと、デザインパターンは理にかなっており、実際に適用することができました。
しかし、Modern C++ のような「ジェネリック プログラミング / メタ プログラミング」 となると、私は混乱してしまいます。
-- 新しいプログラミング/設計パラダイムですか?
――「ライブラリ開発」に限ったことですか?そうでない場合、どのような設計/コーディング状況でメタ プログラミング/ジェネリック プログラミングを使用する必要があるか。
-- テンプレートを使用すると、ジェネリック プログラミングを行っているということですか?
私はこのトピックについて多くのことをグーグルで調べましたが、BIG PICTURE を完全には把握していません。この投稿も参照してください。
以下の議論を読んだ後、今までのところ、私は確信しています(まだ正しくないかもしれません):
a) ジェネリック プログラミングとメタ プログラミングは、2 つの異なる概念です。
c++ - C++ - ジェネリック プログラミング - 型の選択
次のフラグメントは、T 型の (符号なしと想定される) 整数の次に高い 2 の累乗を返します。これは、ビットを繰り返しシフトすることによって行われます。
すべての意図と目的のために、ビット シフト ループで使用される符号なし型 i は、(名目上) 65536 ビット数を表すのに十分な大きさです。したがって、実際には「そのまま」のままで問題ありません。
プロフェッショナルな仕事をするには、オーバーフローなしで sizeof(T)*8 までスパンできることが保証されるように、コンパイル時にループ カウンターの型を選択する必要があります。
std::numeric_traits を使用してコンパイル時にこれを実行できますか? もしそうなら、どのように?
概念的には、次のようなものを書きたいと思います。
以下の議論に基づいて、次のコンテキストを追加することにしました。
別の言い方をすれば:
コンパイル時にテンプレート コードの内部動作に効率的 (必要な大きさのみ) で適切な型を選択することを保証するにはどうすればよいでしょうか? テンプレートコードで具象型を使用していることに気付いた場合、潜在的に不透明なルートを介してテンプレートの型について不注意に仮定している可能性があります。
たとえば、カウンターに int を (たとえば) 使用する場合、誰かがそのテンプレート コードを bigint ライブラリで使用するまでは、すべて正常に機能します。これは、int で表現できるよりも多くの 2 進数で整数を表すことができます。したがって、型を unsigned long long にする必要がありますか? 確かに、それは問題を遅らせるだけですか (長い間ではありますが)? このソリューションには、「640K - 誰にとっても十分な大きさ」または静的配列サイズの色合いがあります。
この場合の明らかな、しかしやや非効率的な選択は、カウンターの型を数値 k の型と同じに設定することです。カウンタが k のビット数に対応する数を表すことができることのみを要求するため、(原則として) 非効率的です。他の状況では、これを想定するのは間違っているかもしれません。
一般的な場合はどうですか?メタプログラミングが適切なアプローチであるように見えます。この「正気」を保つ方法は?おそらく、正式には、コンパイル時の関数が (派生する可能性がある) 抽象型の要件を型にマップすることが要件です。
おそらく、YABL (Yet Another Boost Library) の仕事でしょう!
【乱文失礼します】
c# - 「as T」でエラーが発生するのに、(T) でキャストするとエラーが発生しないのはなぜですか?
なぜ私はこれを行うことができます:
しかし、これではありません:
ジェネリック型を十分に制限していないと不平を言っていますが、そのルールは "(T)" を使用したキャストにも適用されると思います。
c++ - コンセプトとは何ですか?
C ++ 0xにはもう概念がないことについて、このすべての新しい(/。で)聞いたことがありますが、それらが何であるかわかりませんか?誰かが私に説明できますか?
c++ - C++ での関数またはファンクターの戻り値の型の推測
関数/ファンクターの戻り値の型を知らずに (つまり、テンプレートとして) 使用する必要があります。
問題なく2番目の関数に渡すことができましたが:
戻り値をインラインで使用したい (2 番目の関数を呼び出す必要はありません):
2 つの方法は概念的には同じように見えますが (ジェネリック プログラミングに関して)、後者は C++ で実現できますか?
macos - Windows で Mac OS X 用に開発していますか?
まあ、単純な状況。私はたまたま、ソフトウェア開発に Delphi と C# を主に使用するソフトウェア エンジニアです。Delphi はデスクトップ アプリケーションに最適ですが、C# は Web アプリケーション用の ASP.NET と組み合わせるのに最適です。しかし、私は Mac のソフトウェア開発についてもっと独学することを考えています。Xcode と Cocoa が最初の環境になります。新しい言語を学ぶことは私にとって問題ではありません!
ただし、Mac でコードを書き始める前に、まず Mac を購入する必要があります。それらは妥当な価格であるため、どれが必要かを判断するまでに数か月かかる決定になります。だから、今私を助けるために、Mac を必要とせずに Mac 開発についてもっと学ばなければならない可能性を知りたいです!
たとえば、OS X は VMWare 環境で動作しますか? 開発ツールは Windows でも利用できますか? OS X ライブラリの明確な API 概要はありますか?
それとも、最初に Mac を購入し、数週間使ってみてから、その Mac 用のソフトウェアの開発方法を決定する必要がありますか? つまり、今すぐ支出を開始する必要がありますか、それとも数か月後に開始する必要がありますか? :-)