問題タブ [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.
c++ - テンプレートの特殊化にはtemplate<>構文が必要ですか?
これに似たビジタークラスがあります。
明らかにoperator()(bool b)
、前述のテンプレート関数の特殊化を目的としています。
ただし、そのtemplate<>
前に見慣れた構文がなく、これをテンプレートの特殊化として宣言しています。しかし、それはコンパイルします。
これは安全ですか?これは正しいです?
c++ - 関数テンプレートの特殊化フォーマット
次の関数テンプレートの2番目の角かっこ<>の理由は何ですか。
これはSOの質問で出てきて、後に角かっこが欠落していることが示唆されましたがoperator()
、説明が見つかりませんでした。
それがフォームのタイプスペシャライゼーション(完全スペシャライゼーション)である場合の意味を理解しています。
ただし、関数テンプレートの場合:
これはこのシナリオのどこに当てはまりますか?:
動作しているように見え、警告/エラーを表示しないサンプルコード(gcc 3.3.3を使用):
出力:
c++ - 特殊なテンプレートクラスの非型テンプレートパラメータの値にアクセスすることは可能ですか?
特殊なテンプレートクラスの非型テンプレートパラメータの値にアクセスすることは可能ですか?
専門のテンプレートクラスがある場合:
上記の場合、変数を使用する代わりに値4と0をハードコーディングするのは簡単ですが、私が専門としているより大きなクラスがあり、値にアクセスできるようにしたいと思います。
A <4,0>で値(4と0)にアクセスすることは可能major
ですminor
か?または、テンプレートのインスタンス化で定数としてそれらを割り当てる必要がありますか?
c++ - 関数の C++ テンプレートの特殊化: 「明示的なテンプレート引数の不正な使用」
次のテンプレート特殊化コード:
テスト ケース 1:
テスト ケース 2:
次のコンパイル エラーが生成されます。
エラー C2768: 'spec1': 明示的なテンプレート引数の不正な使用
誰かが理由を知っていますか?
c++ - 新しいプリミティブ型の作成
基本型の 1 つ (char など) のような新しい型を作成する方法はありますか?
単一のデータメンバーを含むクラスで可能かもしれないと考えています。そうであれば、それを行う最もクリーンな方法は何であり、コンパイラはそれがプリミティブであるかのように最適化できるでしょうか。
編集: BOOST_STRONG_TYPEDEF を試しましたが、それは基本的なものでうまくいくようですが、新しい型から std::basic_string を作成するにはどうすればよいですか?
結果の型はすべてのメソッドに対してまだ char を期待しているため、最初のものは実際には機能しません.2番目のものは、コンストラクターと代入演算子の存在を好まないようです:(
新しい char 型を作成する他の方法はまだ試していませんが、BOOST_STRONG_TYPEDEF を使用できない場合、これを回避できますか?
c++ - テンプレートの特殊化のためのテンプレート化されたパラメーター?
こんにちは、テンプレート化されたクラスのサブグループ用に定義したいテンプレート化されたクラスの静的メンバーがあります。
悲しいことに、gcc 4.1.1 では次のエラーがスローされます。
D:\X\Foo.h(98) : エラー: テンプレート引数 1 が無効です
行で:template<> template<typename T> int FooT< template Foo<T> >::ms_id = 10;
私が間違っているのは、そもそも許可されている一般的な概念ですか?
c++ - 列挙型のテンプレートの特殊化
列挙型のテンプレート化されたメソッドを特殊化することは可能ですか?
(以下の無効なコード)のようなもの:
それが不可能な場合、私が、、、、などのいくつかのタイプの特殊化を持っていると仮定するとint
、列挙値が使用する特殊化はどれですか?unsigned int
long long
unsigned long long
c++ - C++ コンパイラは、(T 用に) コンパイルされるものを見つけるまで、別の (テンプレート T) 実装を試すことができますか?
これは実装できますか?
そうでない場合、代替手段は何ですか?
c++ - 関数ポインターでの関数テンプレートの特殊化
(従来の) ポインター型のみで実行したいサニタイズ関数があります。
私の問題は、関数をポインターのみに制限する限り取得できる関数テンプレートにありますが、関数ポインターと通常のポインターのキャスト規則の違いにより、問題が発生します。
関数は多数の型に対して実行する必要があり、そのSanitize()
うちのいくつかはポインターであり、サニタイズする必要があり、その他はさまざまなアリティとパラメーター型の関数ポインターであり、サニタイズする必要がなく、そのうちのいくつかは非ポインター データです。サニタイズしてはいけないタイプ。
私が見逃している明らかなものはありますか?
c++ - テンプレートパラメータが同一の場合、C++はクラステンプレート関数を最適化します
テンプレートメソッドを含むテンプレートクラスがあり、2つのテンプレートパラメーターTとUを指定しています。この操作は非常にコストがかかり、プロファイリングでCPU時間の主な用途として表示されます。私はそれをいくらか最適化することができましたが、T == U(これはかなり一般的です)の場合に限りますが、これを行うための構文はわかりません...
問題のクラスとメソッドは次のようになります。
Foo :: barは通常、他のテンプレートコードから呼び出されるため、別のメソッド( "T fastBar()const"など)を作成したとしても、他のテンプレートコードで可能な場合はそのバージョンを呼び出す方法がわかりません。 ..。。
T == Uの明示的な特殊化を作成しようとしましたが、VC9でエラーが発生しました
エラーC2768:'Foo :: bar':明示的なテンプレート引数の不正使用