問題タブ [specialization]
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++ - クラステンプレートの関数の特殊化では順序が重要ですか
次のようなものを検討してください...
特殊化が非特殊化バージョンよりも上にあることに注意してください。特殊化されたバージョンを非特殊化されたバージョンの下Vector<float>
に配置した場合、 == 比較は意図したとおりに機能しますか? 何らかの理由で、このシナリオで特殊化を下に置くと、コンパイラがヘッダーを調べたときに、最初にデフォルトが表示され、それが機能することを確認し、それを使用することを読んだことを覚えていると思います。
c++ - 通常のクラス内でテンプレートの明示的な特殊化のインスタンスを宣言する
これをまったくコンパイルできません。できないかもしれませんが、なぜできないのかわかりません。
コンパイラは、「明示的な特殊化 "class A::B" は、使用する前に宣言する必要があります」と不平を言っているようです。コメント行で前方宣言を提供しようとすると、コンパイラは「明示的な特殊化 "B" は、テンプレートを含む名前空間で宣言する必要があります」と文句を言います。ここでは 2 つの異なるコンパイラを使用します。このエラーは、AIX 上の IBM の "xl" コンパイラによるものですが、Sun システムでコンパイルすると、異なる表現で同様のエラーが発生します。キャッチ22のようです。
明らかに、これは非常に不自然で単純化された例ですが、問題を表しています。テンプレート クラスはそれを含むクラスにのみ関連するため、クラス内でテンプレート クラスを定義したいと考えています。クラス外からテンプレートにアクセスすることはできません。
何か不足していますか?
c++ - 複数のテンプレート パラメーターを使用した C++ の単一テンプレートの特殊化
ハロー!
2 つのテンプレート タイプのうちの 1 つだけに特化したいと考えています。たとえばtemplate <typename A, typename B> class X
、単一の関数に対して特別な実装が必要X<float, sometype>::someFunc()
です。
サンプルコード:
main.h:
main.cpp:
のコンパイルに失敗しましたclass B
。このように C++ でこれができないというのは本当ですか? 最善の回避策は何ですか?
[編集]
template <float, typename I>
void B<float, I>::someFunc();
main.h:26: エラー: 'float' はテンプレート定数パラメーターの有効な型ではありません
template <typename I>
void B<float, I>::someFunc();
main.h:27: エラー: 不完全な型「クラス B」の無効な使用</p>
そして、私はgccを使用しています。
[編集]
特殊化されていない関数が他にもあるため、クラス全体を特殊化したくありません。
templates - 1つの特殊なDテンプレートに複数のタイプ
なんらかの方法で対処する必要があるushort
としましょう。したがって、との両方に1つの専用テンプレートが必要だと思います。それは...ですか?uint
string
string
ushort
uint
コードはコンパイルできませんが、それがアイデアです。それは有効ですか、それとも非常に悪いですか?
design-patterns - 特殊化に基づいて多数のハンドラーのうち 1 つのハンドラーのみが動作するパターン
いくつかのコードを書き直して、いくつかの結合の問題を解決し、将来の変更を容易にしようとしています。
現在、状況に応じて適切な実装を選択する基本クラスに静的ファクトリ メソッドがあります。決定は、専門の程度に基づいています。
タイプ A と B はどちらもこれを処理できますが、B はこの状況のために特別に設計されており、正しい選択です。
したがって、基本クラスはすべての実装と密接に結合されており、このメソッドは、新しい特殊な実装が作成されたときに書き直す必要があります。
Chain of Responsibilityパターンを使用して、この結合を断ち切ることを考えています。ただし、最も適切な実装が確実に実行されるようにする方法がわかりません。この決定を実装に委ねると、同じ結合の問題が発生せずに特殊化の順序でクエリが実行されることを保証できません。
このような状況を処理するためのパターンや方法はありますか? (私の最善の推測では、展開を妨げるでしょう。誰もが「そうです、それがそれを行う唯一の方法です!」と言わないように、私はそれを後ろのポケットに入れておきます。)
c++ - C++テンプレートの専門化
こんにちは!誰かが次の動作を達成またはエミュレートする方法を知っていますか? (このコードはコンパイル時エラーになります)。
たとえば、派生クラスにのみ特定のテンプレートの特殊化を追加したいと思います。
c++ - フレンド宣言は非テンプレート関数を宣言します
以下のコードに似た基本クラスがあります。coutで使用するために<<をオーバーロードしようとしています。ただし、g++は次のように言っています。
クラス宣言/プロトタイプの<<の後に<>を追加してみました。しかし、私はそれを取得しdoes not match any template declaration
ます。演算子定義を完全にテンプレート化しようとしましたが(必要です)、演算子を手動でインスタンス化して、次のコードでのみ機能させることができました。
base.h
base.cpp
ヘッダーbase.hにこれまたは類似のものを入れたいだけです。
プロトタイプの<<と()の間に<>を入れるとこれが修正されるはずだとオンラインで読んだことがありますが、修正されません。これを単一の関数テンプレートにまとめることはできますか?
c++ - テンプレートクラスをオーバーロードすることは可能ですか?
テンプレートメソッドがオーバーロードされる可能性があることがわかりました。テンプレートクラスでも同じことができますか?2つのテンプレートクラスがテンプレートクラスのインスタンス化と一致する場合、コンストラクターでパラメータータイプを使用して、どちらを使用するかを推測できます。
class - UML またはクラス定義を使用して特殊なクラスの多重度およびその他のプロパティを制限する方法
UML クラス図と対応するクラス定義 (C# や Java など) を作成しようとしています。ここでは、関係の一般的な階層と、その一般的な関係に基づいているがそれを制約する 1 つ以上の特殊なクラスがあります。
たとえば、次のような一般的な UML 関係があるとします (UML に似ていると仮定します)。
(読み方: ルーターには 1 つ以上のカードが含まれ、各カードには 1 つ以上のポートが含まれます)
次に、それを拡張して、CiscoRouter などの特殊なクラスを定義したいと考えています。
さらに、CiscoRouter は 1..10 枚のカードしか持つことができないとしましょう。モデルでこの制限を定義する方法はありますか?
次のようなことができます。
しかし、これは技術的に Card オブジェクトの 2 つの別々のコレクションを作成することになりますよね? これを最もよく定義する方法について何か提案はありますか?
Cisco7200Router、LinkSysRouter などのクラスと、カスタム カード、ポートなどが必要になるため、実際の設計はおそらくもっと複雑になります。たとえば、次のようになります。
さらに複雑なことに、Router に Weight というプロパティがあるとします。ただし、CiscoRouter では、実際にそのプロパティを特定の値、たとえば 4 ポンドに定義したいと考えています (たとえば、このモデルでは、CiscoRouter の重量は 4 ポンドで、カードが 10 枚あり、各カードには 4 つのポートがあると記述されています)。これをどのように定義しますか?
抽象クラスやメソッドなどを使用して、コードでこれの多くを実行できることを知っています。しかし、モデルまたはメタデータでこれをできるだけ多く定義して、何も実行せずに設計ドキュメントを生成できるようにする明確な方法があるかどうかを知りたいです。
前もって感謝します、
ダン
c++ - C ++テンプレートは、特定のタイプに対して関数がオーバーロードされているかどうかを確認できますか?
さまざまな場所でさまざまなタイプにテンプレート化されることを期待しているテンプレート関数があります。
問題は、コンパイル時に、特定のタイプが2つの異なる方法で別のテンプレートを生成するための特殊化があるかどうかを知りたいということです。
ここのように関数の存在をテストできることは知っています。
toboolが専門化されているかどうかをテストする方法についてのチャンスはありますか?
tobool()が特殊化されている場合はtrueを返し、そうでない場合はfalseを返すisbool()を生成したいとします。