問題タブ [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++ - C ++テンプレートは、特定のタイプに対して関数がオーバーロードされているかどうかを確認できますか?
さまざまな場所でさまざまなタイプにテンプレート化されることを期待しているテンプレート関数があります。
問題は、コンパイル時に、特定のタイプが2つの異なる方法で別のテンプレートを生成するための特殊化があるかどうかを知りたいということです。
ここのように関数の存在をテストできることは知っています。
toboolが専門化されているかどうかをテストする方法についてのチャンスはありますか?
tobool()が特殊化されている場合はtrueを返し、そうでない場合はfalseを返すisbool()を生成したいとします。
c++ - クラス テンプレートからのメソッド テンプレートの完全な特殊化
この話題は今ではほとんど時代遅れになっているはずですが、この特定のケースについては苦労しています。
要するに、これが私がやりたいことです:
これは可能ですか?
c++ - ポインターまたは参照を使用する場合のテンプレートの特殊化の優先順位
次のような Serializer クラスがあります。
今私の問題は、Serializable インターフェイスを継承するクラスがある場合、それらを Func 2 で処理したい場合でも、常に Func 1 で処理されることです (ポインターまたは参照はどちらも同じように動作します)。次のように明確に指定しない限り、C++ は Serializable インターフェイスが継承されていることを認識しないようです。
もちろん、どこかに追加するのを忘れるとすぐに<Serializable>
、プログラムはバグアウトします。これはかなり面倒です。
これを回避する方法はありますか?
c++ - テンプレート内のメソッド ポインターを部分的に特殊化する
読み取り専用、書き込み専用、および読み取り書き込みの動作でプロパティを実装しようとしています。テンプレートの特殊化がここに行く方法だと思ったので、これを試しました:
これは機能せず、コンパイラ エラー (VC) が発生します。部分的な特殊化は、依存型の非型テンプレート パラメーターを持つことはできません。
私はここで道に迷っています、これは可能なのですか?
時間をありがとう、リチャード。
c++ - 複数の型名に対する部分的なテンプレートの特殊化
次のコードでは、 return をOp
持つ関数 (s) をvoid
return と見なしたいと考えていtrue
ます。typeRetval
と の戻り値Op
は常に一致します。ここに示されている型特性を使用して区別することはできませRetval
ん.Op
Args
エラーを発生させずに、テンプレートの特殊化で一部の変数のみを特殊化するにはどうすればよいですか? の戻り値の型に基づいて動作を変更する他の方法はありOp
ますか?
c++ - この部分的なテンプレートの特殊化の何が問題になっていますか?
コードの後半でこれを呼び出します。
このエラーが発生します:
src/cpfs/entry.cpp:1908: エラー: 関数テンプレートの部分的な特殊化 'call_retval_wrapper<bool, Op, Args>' は許可されていません
c++ - メンバー列挙型を使用してテンプレートを特殊化することは可能ですか?
使用法:
T::Special
gcc 4.1.2 を使用してコンパイルに失敗します。Foo の部分的な仕様化のための の使用について不平を言います。クラスの場合Special
、解決策はその前のタイプ名になります。列挙型 (または整数) に相当するものはありますか?
c++ - C++ テンプレートの部分的な特殊化エラー
次のコードでコンパイル エラーが発生します。class Q64 is not a valid type for a template constant parameter
どうしたの?私はgrid_residue
クラスに特化しようとしていQ64
ます。
アップデート:
構文が変更されました。エラーが発生するようになりましたerror: function template partial specialization 'grid_residue<GRIDD, Q64>' is not allowed
ありがとう
c++ - 静的フィールドの初期化のテンプレート部分特殊化
私は次のようなことを試みています:
これを2つのファイル(a.cppとb.cpp)に含めます。私はコンパイルして取得しようとします:
私のC++構文は悪いと思いますが、私が間違っていることを考えることはできません。
template<>
複数の変換単位でこれが必要なため、変数定義からを削除できません。これにより、リンクエラーが発生します。
フィールドを基本クラスに入れ、CRTPを使用してタイプごとに新しいインスタンスを作成すると、特殊化が邪魔になりませんが、この「直接」フィールド初期化が機能しないのはなぜですか?構文の一部が欠落している必要があります。
私はVS2003を使用しています:(
c++ - 特殊化されたテンプレート クラス関数から特殊化されていないテンプレート クラス関数を呼び出す
特殊化されていないテンプレート クラスで定義された関数を、特殊化されたテンプレート クラスから呼び出すことは可能ですか? これが私が試みているものの例です:
GCC は、特殊化されていないクラス関数を認識できないと不平を言っています。つまり、特殊なクラス内でのみ見えると思います。
何かご意見は?
編集
これは私のコードのより具体的な例です(可能な解決策があります):
他にも toString()、countDigits() などの関数があります。このアプローチを選択したので、型ごとに同じ関数名を使用できます (つまり、toStringU32()、toString32 などは必要ありません)。テンプレートの特殊化を検討しましたが、これが可能だとは思いません。