問題タブ [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++ - 継承クラスに基づくテンプレートの特殊化
これをメインに変えずに特化させたい。基本クラスに基づいて何かを特殊化することは可能ですか? そうだといい。
-編集-
SomeTag から継承するクラスをいくつか用意します。それぞれに同じ専門分野を書きたくありません。
c++ - 特殊化されていないバージョンのメンバー関数を使用する特殊なテンプレートを取得するにはどうすればよいですか?
次のコードを検討してください。
このコードをコンパイルすると、次のエラーが発生します。
1>main.obj : エラー LNK2019: 未解決の外部シンボル "public: struct vec<3> __thiscall vec<3>::normalize(void)" (?normalize@?$vec@$02@@QAE?AU1@XZ) が参照されました関数 _main で
c++ - 部分的なクラス テンプレートの特殊化は、この設計上の問題に対する答えですか?
リモートサーバーに接続するのが仕事のクラスがあるとします。このクラスを抽象化して、UDP 経由で接続するバージョンと TCP 経由で接続するバージョンの 2 つのバージョンを提供したいと考えています。可能な限り無駄のないランタイム コードを構築したいと考えており、ポリモーフィズムを使用する代わりに、テンプレートを検討しています。これが私が想定しているものですが、これが最善の方法であるかどうかはわかりません。
したがって、最終的な利点は、T の汎用性が引き続き利用できることですが、UDP または TCP 接続をセットアップするために必要な非常に異なるコードが特化されています。両方を 1 つのクラスに入れるか、IConnectionManager などのネットワーク接続を設定するための純粋な仮想インターフェイスに準拠する別のクラスを提供できると思います。
しかし、これにより、ジェネリック T のコードを両方の特殊化されたバージョンで記述して維持する必要があり、最終的には同じであるという問題が残ります。これに対処するにはどうすればよいですか?私はこれについてすべて間違っていると感じています。
c++ - 次のオーバーロード/特殊化の動作に対して正しいコンパイラはどれですか?
次のコードを検討してください。
期待される出力は何ですか?「T」またはint?
1つのコンパイラ(AppleのXcode3.1.2のgcc4.0.1)は「int」を出力し、他の2つのコンパイラ(gcc 4.1.2および4.1.3)は「T」を出力します。
foo(int *、int)宣言/定義をfoo(T *、int)バージョンの前に移動すると、すべて「int」が出力されます。この場合のオーバーロード/特殊化の順序は、現在の標準で定義されていますか?
c++ - メンバ関数へのポインタを検出することは可能ですか?
メンバー関数へのポインターの場合に特化したテンプレートが必要です。これを検出する方法はありますか?今、私は構造体 isPtrToMemberFunc を宣言し、追加のテンプレート (クラス TType=void) を各クラス (現在は 1 つだけ) に追加し、追加のテンプレートを特殊化して、その isPtrToMemberFunc かどうかを確認します。これを自動的に検出する方法はありますか?そうでない場合、私の現在の方法が最善の解決策ですか?
c++ - 継承と特殊化
次の 2 つの使用シナリオを考慮してください (ご覧のとおり、つまり、エンド ユーザーは と の使用のみに関心がVector2_t
ありますVector3_t
)。
[1]継承:
[2]専門:
どちらがより良い解決策であるかについて、私は決心できません。継承の明らかな利点は、派生クラスでのコードの再利用です。パフォーマンスが不利になる可能性があります (サイズが大きい、ユーザーが値を渡す可能性があるなど)。専門化はそれをすべて回避しているように見えますが、私は自分自身を何度も繰り返さなければならないという犠牲を払っています.
他に見逃した長所/短所はありますか? また、あなたの意見では、どのルートを選択する必要がありますか?
c++ - 関数テンプレートの特殊化を仮想的に合法化していますか?
C ++では、関数テンプレートの特殊化は、通常の関数とまったく同じように機能することになっています。それは私が1つを仮想化できることを意味しますか?
例えば:
Visual Studio 2005では、次のエラーが発生します。
致命的なエラーC1001:コンパイラで内部エラーが発生しました。
delphi - ジェネリック型のサイズ
次のようなもののバイト単位のサイズを決定する方法はありますか
のようなものを書くことができますか
それとも専門化の助けを借りて?
ありがとう!
c++ - メンバー テンプレートの特殊化とそのスコープ
C++ では、名前空間とグローバル スコープ以外のスコープでのメンバー テンプレートの特殊化は許可されていないようです (MS VSC++ エラー C3412)。しかし、私にとっては、基本クラスのプライマリ メンバー テンプレートを派生クラスで特殊化することは理にかなっています。これは、派生クラスが行うこと、つまり基本クラスでの特殊化だからです。たとえば、次の例を考えてみましょう。
私の質問は、なぜそれが許可されていないのですか?