問題タブ [template-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 に答える
10201 参照

c++ - テンプレートの特殊化を異なる名前空間に含めることができないのはなぜですか?

どうか、私がやろうとしていることを見てください:

これは許可されていません。スペシャライゼーションを異なる名前空間に含めることができない理由と、利用可能なソリューションを明確にしてください。また、C ++ 0xで修正されたものですか?

これにより、たとえば、?に何かを追加することで、未定義の動作に頼ることなく、、、などを専門std::max化することができます。std::swapstd::numeric_limits::std::


@AndreyTこれが私がそれを使う方法です:

これはできますか?

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

c++ - テンプレート化されていないクラスのテンプレート化されたメンバー関数を特殊化する方法は?

ファイルalpha.hがあるとします:

複数の cpp ファイルに alpha.h をインクルードし、GCC 4.4 でコンパイルすると、複数のオブジェクト ファイルfoo<int>にまたがる複数の定義があるとエラーが表示されます。foo<float>私には理にかなっているので、最後の 2 行を次のように変更します。

しかし、GCCは次のように述べています。

明示的なテンプレートの特殊化は、ストレージ クラスを持つことはできません

わかりました...どうすればこれを正しく行うことができますか? そもそも私がやろうとしていることを C++ が許可していないのではないかと心配しています。その場合、同じことを達成する良いイディオムはありますか?

0 投票する
7 に答える
4811 参照

c++ - Typedef とテンプレートの特殊化

次のコードを検討してください。

コンパイラが認識するのは の 2 つの特殊化であるため、失敗しますsome_trait<int>

これを回避する最善の方法は何ですか?

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

c++ - char の配列のテンプレートの特殊化に関する「未解決の外部シンボル」

私のコードには次のようなものがあります:

これにより、次のリンカ エラーが生成されます。

文字の配列で使用できるように、A テンプレートをどの型に特化する必要がありますか? const char*const、char、*、および & の他の組み合わせを試してみましたが、何も機能しません。

機能を変更することはできませんのでご注意くださいDoSomething

また、可能であれば、 のDoSomething<smth>()呼び出しでテンプレートの型を指定せずに、コンパイラに自動的にテンプレートの型を推測 (または変換) してもらいたいと考えていますmain()

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

c++ - SFINAE: いくつかの失敗は他よりも平等ですか?

「名前」というメンバーを持つクラスを区別するためにSFINAEを使用しようとしています。標準パターンと思われるものを設定しましたが、機能していません。「失敗した」置換を黙って無視する代わりに、コンパイラはエラーを生成します。

私はいくつかのテンプレート置換ルールに遭遇したと確信しています。誰かがどれを説明できるかを教えていただければ幸いです。

これは簡略化された例です。私はgccを使用しています:

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

c++ - クラス名前空間内のテンプレートの特殊化

クラスの本体の外部名前空間で定義されたテンプレートを特殊化するにはどうすればよいですか?

コンパイルされないBGLを使用した具体的な例:

container_genの特殊化をクラスAから移動すると、すべてがうまく機能します。特定の問題は、クラスAから「ブースト」名前空間を参照する方法がわからないことです。

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

c++ - クラステンプレートの関数の特殊化では順序が重要ですか

次のようなものを検討してください...

特殊化が非特殊化バージョンよりも上にあることに注意してください。特殊化されたバージョンを非特殊化されたバージョンのVector<float>に配置した場合、 == 比較は意図したとおりに機能しますか? 何らかの理由で、このシナリオで特殊化を下に置くと、コンパイラがヘッダーを調べたときに、最初にデフォルトが表示され、それが機能することを確認し、それを使用することを読んだことを覚えていると思います。

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

c++ - テンプレートの特殊化のための type-tag の作成方法

iostreamテンプレートを介して -syntax をサポートするカスタム ロギング クラスがありますoperator <<

ログメッセージが完了したときに呼び出されることになっている、このオペレーターの特殊なバージョンもあります。

EndOfMessageTypeは次のように定義されます。

グローバル定数は、ユーザーがログ メッセージの最後eomと同じように使用できるように定義されています。std::endl私の質問は、このソリューションに落とし穴はありますか、それともこれを行うための確立されたパターンはありますか?

前もって感謝します!

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

c++ - テンプレートの特殊化: 非インライン関数定義の問題

次のコードは正しくコンパイルされます。

しかし、外部で定義しようとするとvoid doSomething(char val1, std::string val2)、次のエラーが発生します。

エラー:

エラー 1 エラー C2910: 'Container::doSomething': 明示的に特殊化することはできません c:\users\bharani\documents\visual studio 2005\projects\templates\template specialization\templatespecializationtest.cpp 35

私はどんな間違いを犯しますか?

ありがとう。

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

c++ - クラステンプレートの明示的なインスタンス化の前に、外部クラステンプレートの明示的なインスタンス化が必要な理由

私の質問は次のスレッドです:親を特殊化せずにメンバーテンプレートを特殊化する

私はそうすることは違法であると言っている基準で絶対に大丈夫です。しかし、なぜそうすることが違法なのかを理解したいのですが?それが許可された場合、どのような影響がありますか?