問題タブ [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.

0 投票する
2 に答える
394 参照

c++ - C++ テンプレート メタマジック、テンプレート呼び出しサイト修飾控除メカニズム

この例が冗長であることをお詫びします。プロジェクトから考案したものです。コメントされた項目 1 と項目 2 は、次のコードで重要です。

スコープ内の関数が const であるメンバ コンテナ (アイテム 2) に非 const イテレータを使用することはできません。イテレータを const_iterator に切り替えるとすべて正常に動作するか、囲んでいる関数を非 const にすると同様に動作します. 次のエラー メッセージから問題を 1 時間リバース エンジニアリングした後、今では完全に理にかなっています。

test.cc: メンバー関数 'void トランポリン::bounce() const':test.cc:21: エラー: 'boost::intrusive::tree_iterator<boost::intrusive::rbtree_impl<boost::intrusive: からの変換: :setopt<boost::intrusive::detail::base_hook_traits<x, boost::intrusive::rbtree_node_traits<void*, false>, (boost::intrusive::link_mode_type)1u, boost::intrusive::default_tag, 3 >, std::less<x>, long unsigned int, true> >, true>' を非スカラー型 'boost::intrusive::tree_iterator<boost::intrusive::rbtree_impl<boost::intrusive::setopt <boost::intrusive::detail::base_hook_traits<x, boost::intrusive::rbtree_node_traits<void*, false>, (boost::intrusive::link_mode_type)1u, boost::intrusive::default_tag, 3>, std::less<x>, long unsigned int, true> >, false>' リクエスト

最終的に、次のテンプレート定義にたどり着きました (/include/boost/intrusive/detail/tree_node.hpp +72):

それで十分だったので、すぐに問題を解決したと言います....

そのテンプレートIsConstは、囲んでいる関数のコールサイトからどのように渡されるのでしょうか? 私の脳は爆発する準備ができています(私が知っている限り、それは単純なことですが、私は当惑しています). 仕組みを説明するための段階的な実装を含む詳細な説明は役に立ちます。

C++ のテンプレート メカニズムの型推定/エイリアシングに関して同様の質問がここにあります。参考文献は高く評価されますが、知識に熟考する必要があります:D. この質問に答える忍耐力がある場合は、別の質問についての談話を作成してみてください。

0 投票する
2 に答える
5903 参照

c# - ジェネリック辞書を作成する方法は?

特定のキーを保持する辞書があるクラスがあります。ただし、値は一般的なものである必要があります。

何かのようなもの:

しかし、TValueは(明らかに)見つかりませんが、他に何を入れる必要がありますか?IListの解決策を見つけましたが、汎用オブジェクトを1つ追加したいだけです。

0 投票する
5 に答える
1004 参照

optimization - 組み合わせ最適化問題のツリー検索用ライブラリ

私が遭遇する「難しい」組み合わせ問題のいくつか 、アルファベータ法、ビームサーチ、または同様のアルゴリズムなど、ある種のツリーサーチの観点から投げかけることができることに気づきました。ただし、それらをプログラミングすることは、同じことを繰り返しコーディングしているように見え、間違いを犯しやすいこともあります。これらのアルゴリズムを実装するライブラリがあるはずだと私には思えます、そして私が書くように頼まれるべきなのは

  1. ソリューションのコーディング、つまり、不完全なソリューションからより具体的なソリューションを取得する方法。これにより、ツリー/グラフの構造が得られます。
  2. 部分的な解決策を考えると、最大/最小コストを取得する方法、そしておそらくコストの見積もり。
  3. 初期ソリューション/部分ソリューション。
  4. 多分ある種の検証ソリューション。

特定のコードを提供していないことをお詫び申し上げますが、問題を説明したと思います。上記の関数のコードを記述できれば、多くのツリー/グラフ検索アルゴリズムを簡単に実行できるはずではありませんか?これを簡単にサポートするユーザーフレンドリーなライブラリ/フレームワークはありますか?PythonまたはC/C ++で使用したいのですが、何か提案があれば興味があります。

編集:より正確に言うと、私は情報に基づいたツリー検索アルゴリズムについて話しています。

0 投票する
6 に答える
4143 参照

c++ - C++ vs. D 、Ada および Eiffel (テンプレートでの恐ろしいエラー メッセージ)

C++ の問題の 1 つは、テンプレートとテンプレート メタプログラミングを集中的に使用するコードから得られる恐ろしいエラー メッセージです。コンセプトはこの問題を解決するように設計されていますが、残念ながら次の標準には含まれません。

この問題は、ジェネリック プログラミングをサポートしているすべての言語に共通しているのでしょうか。または、C++ テンプレートに何か問題がありますか?

残念ながら、ジェネリック プログラミングをサポートする他の言語は知りません (Java と C# のジェネリックは単純すぎて、C++ テンプレートほど強力ではありません)。

D、Ada、Eiffel テンプレート (ジェネリック) もそのような醜いエラー メッセージを生成しますか? また、強力なジェネリック プログラミング パラダイムを備えた言語で、醜いエラー メッセージを表示しない言語を作成することは可能ですか? はいの場合、これらの言語はこの問題をどのように解決していますか?

編集:反対票を投じた人向け。C++ とテンプレートが大好きです。テンプレートが悪いと言っているのではありません。実際、私はジェネリック プログラミングとテンプレート メタプログラミングの大ファンです。コンパイラからこのような醜いエラー メッセージが表示される理由を尋ねているだけです。

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

c++ - C++テンプレートプログラミング構造体とテンプレート

クラスclsに機能を提供するために、たとえば「追加」、以下は私が決定したタイプです。

対。

どのアプローチを優先する必要がありますか、最初のアプローチは2番目のアプローチよりも優れており、その逆もありますか?

0 投票する
2 に答える
1506 参照

generics - 一般的な方法でScalaコレクションを操作する

最長共通部分列(LCS)を見つける関数を作成しました。たとえば、chars BANANAとATANAの2つのシーケンスの場合、AANAを返します。実装は再帰的アルゴリズムの素朴で非効率的な適応ですが、この質問の目的には関係ありません。

この関数を可能な限り一般的な方法でリファクタリングしたいと思います。現在の実装は、あらゆるタイプの入力シーケンスで機能しますが、常にタイプList[T]のコレクションを返します。私は次の行動を達成したい:

LCSが文字列配列も処理できれば素晴らしいと思います。

Scala 2.8ジェネリックコレクションライブラリの助けを借りて、少なくとも最初の要件を達成することが可能であると私は信じています。より高度なポリモーフィズム、型クラス、CanBuildFromなどの「重い」機械を見て喜ぶでしょう。

ありがとう!

0 投票する
2 に答える
475 参照

haskell - 一般的なhaskellをインストールする方法

ハグをインストールしてからghc6をインストールしてからgenericをインストールした後-haskellには次のメッセージがあります。

ubuntuでghc-6.2.2をコンパイルすると次のエラーが発生しました

古いバージョンのGHCと一般的なhaskellをubuntu10にインストールした人はいますか?

バージョンのペアはたくさんありますが、ghc-6.2.2で上記のエラーが発生しましたが、ubuntu 10をアンインストールして、古いバージョンのubuntuをインストールして動作させる必要がありますか?どのバージョンのghcでどのバージョンのubuntuが機能しますか? http://www.cs.uu.nl/research/projects/generic-haskell/compiler.html

0 投票する
2 に答える
276 参照

haskell - Typeableを使用して、実行時に関数を部分的に適用します(タイプが一致する場合はいつでも)

ジェネリックプログラミングの時間!

関数がある場合:

と値

コンパイル時にf、値のどの引数がv(もしあれば)正しいタイプであるかを知らなくても、部分的に適用できますfv?(Typeable、Data、TH、またはその他のトリックを使用)

もう少ししっかりと、g実行時に関数(以下)を作成できますか?実際には多型である必要はありません。私のタイプはすべて単型になります。

Typeable(typeRepArgs具体的には)を使用することvがの3番目の引数であることは知っていますがf、それは部分的に適用する方法があるという意味ではありませんf

私のコードはおそらく次のようになります。

実装できるものはありmagicApplyFunctionますか?

編集:私はついにこれで遊ぶことに戻りました。魔法の適用機能は次のとおりです。

0 投票する
2 に答える
296 参照

algorithm - インターネット上の2つのピア間で利用可能な帯域幅を見つけるアルゴリズムはありますか?

2 つのピア間の利用可能な帯域幅を表示するプログラムを開発しようとしています。後で、このモジュールは私のアプリケーションに統合され、P2P アーキテクチャを使用してさまざまなユーザー操作 (チャット、デスクトップ共有など) を容易にします。

2 つのピア間で現在利用可能な帯域幅を見つけるための Spruce アルゴリズムについてどこかで読んだことがありますが、それを使用できるかどうかはわかりません。

これを達成するためにすでに開発されたアルゴリズムはありますか?アーキテクチャが P2P であることを覚えておいてください。

これは、取り組み始めたときは簡単な問題に思えましたが、今では見た目よりもはるかに難しいことに気付きました....だから、経験豊富で熱心なネットワーク プログラマーの助けが必要です...

前もって感謝します..

0 投票する
2 に答える
153 参照

c++ - ファイル ストリームの一般的な操作

ファイル ストリームを一般的に操作したい。つまり、「実装ではなくインターフェイスにプログラムする」ことを望んでいます。このようなもの:

出来ますか?私は継承が苦手です。io クラス階層が与えられた場合、必要なものをどのように実装すればよいですか?