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

0 投票する
3 に答える
2062 参照

c++ - 関数テンプレートの部分的な特殊化の回避策は?

次の積分 pow のメタ関数を考えてみましょう (これは単なる例です)。

このような関数の停止条件をどのように書くのですか?

0 投票する
1 に答える
4847 参照

c++ - メンバー関数の部分的な特殊化

重複の可能性:
部分的なテンプレートの特殊化による「不完全な型の無効な使用」エラー

なぜ私はこれを行うことができるのですか?

しかし、これではありません:

2番目のケースでは、GCCは次のエラーを出します。

編集

2番目の例が許可されない理由を説明するときは、メンバー関数をテンプレートとして作成しても、どの例が機能し、どの例が機能しないかには影響しないことも考慮してください。つまり、これは引き続き機能します。

しかし、これはしません:

Uしたがって、3番目の例は完全な特殊化ではなく(テンプレートパラメータはまだ存在します)、それでも機能するため、関数テンプレートは完全に特殊化することしかできないという理由はありません。

0 投票する
1 に答える
305 参照

c++ - メンバー テンプレートの特殊化

コメントを削除すると、コードはコンパイルされません。partial specialization私はこれを知っています(そして、私たちが を持っているべきであることも知ってC<T*>います)が、そのような動作を説明する標準の単語を見つけることができません。私14 parは標準を数回読み直しました。これを説明する見積もりまたは基準値を教えていただけますか?

編集。

次にコメントのみを削除すると、#2 - コードはコンパイルされません。

0 投票する
3 に答える
90 参照

c++ - C++ は部分的な特殊化を理解するのに役立ちます

私はいくつかのクロムプロジェクトのソースコードを読んでいますが、理解できないことが1つ見つかりました.1つのパラメーターと以下のような部分的な特殊化を受け取るテンプレートがあります:

次に、次の例のようにオブジェクトを作成できます。

この表現 " float (int , string) " を理解しようとしていますが、それは一般的にどういう意味ですか? 名前のないある種の関数シグネチャですか?? 私は完全に混乱しています。

誰かがそれがどのように機能するかを説明できますか?

前もって感謝します

0 投票する
1 に答える
458 参照

c++ - テンプレートクラスから継承された非テンプレートクラスによる部分的な特殊化

例1

BaseDerivedクラスがある場合

およびテンプレートクラス

次の方法で部分的な特殊化を書くことができます:

例1は問題なく動作します。(完全なコード: http: //ideone.com/4FyrD

例2

Baseクラステンプレートを1つにすると、次のようになります。

次の部分的な専門化は機能しません:

例2はコンパイルされませんコンパイラはエラーをスローします"template parameters not used in partial specialization:"(完全なコード:http://ideone.com/gZ6J2

質問

だから問題はです。から派生したすべてのクラスで機能する部分的な特殊化を作成する方法はありますかBaseTpl

スペシャライゼーションが機能するクラスのリスト:

0 投票する
1 に答える
1203 参照

c++ - C ++ブレークテンプレートの特殊化のあいまいさ

C++ テンプレート メタプログラミングを読み、そこに含まれる演習を行ったところ、問題が発生しました。問題の核心は、この小さな例で見ることができます:

c の型があいまいであるため、これはコンパイルに失敗します。コンパイラは、どの特殊化をインスタンス化する必要があるかを判断できませんが、このような場合、最初の特殊化を呼び出す必要があることはわかっています。私がこれまでに思いついた解決策は、このように書き直すことです

この解決策の問題は、実際にはポインター、const、参照、および配列型のそれぞれに部分的な特殊化があるため、このチェックを各特殊化に個別に追加する必要があったことです。

私の質問は、以前の素晴らしいコンパクトな特殊化を持ち、何らかの方法で微調整して、コンパイラが特殊化をインスタンス化する方法があるかどうかです。

あいまいな場合に備えて、他の専門分野の代わりに?

興味のある方のために、私が取り組んでいる質問は第 2 章の質問 1 です。

0 投票する
3 に答える
1367 参照

c++ - テンプレートクラスを使用した関数テンプレートの特殊化

重複の可能性:
関数テンプレートの部分的な特殊化

思いついたキーワードで検索すると、さまざまな問題に適した解決策が得られるため、問題の解決策はどこにも見つかりません。私はこれが前に尋ねられなければならないことを理解しています、ただ解決策を見つけることができません。

関数テンプレートがあるとします。

私はそれをこのように専門化することができます:例えばint

しかし、今問題は、ベクトルでも機能するようにしたいです。ベクトルクラスはテンプレートクラスであるため、難しくなります。

このような機能を専門にする:

次のエラーが生成されます(MinGW g ++):

関数printは単なる例であることに注意してください。

どうすればこれを解決できますか?

0 投票する
1 に答える
844 参照

c++ - リンク時の部分的な特殊なテンプレートクラス関数への未定義の参照

そのため、関数テンプレートの部分的な特殊化に問題がありました。ここで説明するソリューションを選択します:質問

今私はこれを持っています:

しかし、私はこのレイアウトが欲しいです:

helper.hpp

vector_helper.cpp

print.hpp

main.cpp

このようにコンパイルされます:

問題は、MinGWがリンク時エラーを生成していることです:未定義の参照helper<vector<...>>::print(vector<...>)

行を追加すると:

以前int main() {...}は、正常にコンパイルされ、動作します。g ++コマンドでリンクされたファイルにクラスの特殊化を追加したいので、どうすれば解決できますか。

0 投票する
1 に答える
784 参照

c++ - メンバー関数の部分的なテンプレートの特殊化: 「プロトタイプが一致しません」

テンプレート化されていないクラスのテンプレート化されたメンバー関数を部分的に特殊化しようとしています:

次のエラーが表示されます。

コンパイラ エラーを修正するにはどうすればよいですか?

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

c++ - partial specialization does not specialize any template arguments

I have the following code in which Im trying to make a templated safe array iterator.

However when I compile I get -

and Im not sure what that means. My guess was that its says that I declare a T but I never use it, but this obviously isnt the case.