問題タブ [explicit-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++ - ネストされたテンプレートの特殊化
テンプレートパラメータがクラスと同じタイプの場合、特殊なコンストラクタを必要とするテンプレートクラスがあります。以下のコードはコンパイルされません。
タイプがDualの場合に、特定のコンストラクターの使用を指定するための正しい構文は何ですか?特に、テンプレートパラメータがDual型の場合は、初期化子リストのメンバー'real'を初期化する必要がありますが、そうでない場合(たとえば、double型)は初期化できません。
c++ - テンプレートメンバーの特殊化を試みる「'<'トークンの前に期待される初期化子」
テンプレートクラス内にテンプレートメンバーを定義しようとしています。
ヘッダーファイルのフラグメントは次のとおりです。
したがって、テンプレートメンバーは定義されていますが、docopyメソッドを明示的に特殊化して、型がポインターの場合にディープコピーするようにします。メソッドテンプレートと特殊化を使用して、ヘッダーファイルから別のフラグメントを配置します。
コンパイラは次のエラーを送信します:'<'トークンの前に初期化子が必要です。
何が間違っているのか理解できません。何か助けはありますか?
optimization - GHCのSPECIALIZEプラグマを適切に使用するにはどうすればよいですか?(例:Identityを使用してモナディック関数から純粋関数を特殊化する。)
例として、リスト上にモナディックマップと非モナディックマップを記述したいとします。私はモナディックのものから始めましょう:
map
ここで、コードを再利用して、 (コードを繰り返すのではなく)純粋なものを記述したいと思います。
明示的に書かれmap'
ているかのように最適化するには何が必要ですか?map
特に:
書く必要がありますか
またはGHCは(完全
map'
に除外することによって)それ自体を最適化しますか?Identity
他に何か(より多くのプラグマ)を追加する必要がありますか?
map'
明示的に記述されたコードに対して、コンパイルがどの程度最適化されているかを確認するにはどうすればよいmap
ですか?
c++ - クラステンプレートの状態データメンバーであり、明示的に特殊化できるエンティティではありません
以下のコードでエラーが発生しました:
どうすれば修正できますか?
c++ - 列挙型に一致するクラス テンプレートの部分的なテンプレート特殊化を作成できますか?
次のような構文を提供する一連のクラステンプレートの明示的な特殊化によって強化された関数テンプレートがあります
(どこGetAs<t>
に次のようなものがあります:
)
その型が列挙型の場合に特殊化しDesiredType
て、返される型が列挙型 (または) の基になる型と一致するようにしたいと思いenum class
ます。
それは可能ですか、それともクライアントは基になる型を自分で指定する必要がありますか?
次のようなコードを許可しようとしています。
c++ - SFINAE: 明示的な特殊化を必要とするテンプレート関数の存在を検出する
前の質問のフォローアップとして、明示的な特殊化を必要とするテンプレート関数の存在を検出しようとしています。
私の現在の作業コードは、非テンプレート関数を検出します (DyP の助けのおかげで)。依存する名前のルックアップを使用できるように少なくとも 1 つのパラメーターを取る場合:
(ENABLE_FOO_BAR
マクロはテスト目的のためのものです。私の実際のコードでは、そのようなマクロを利用できません。そうでなければ、SFINAE を使用しません)
これは、テンプレート引数がコンパイラによって自動的に推定できる場合、テンプレート関数でも完全に機能します。
ただし、明示的な特殊化が必要なテンプレート関数を検出しようとすると、存在するstatic_assert
場合にfoo::bar()
開始されます:
明らかに、コンパイラはテンプレート引数を推測できないbar()
ため、検出は失敗します。呼び出しを明示的に特殊化して修正しようとしました:
これは、存在する場合は正常に機能します (関数は正しく検出されます) が、存在しない場合foo::bar()
はすべてが崩壊します。foo::bar()
bar
コンパイラはそれがテンプレートであることを認識していないため、明示的な特殊化の試みが失敗したようです。
これを修正するために私が試みたすべてのことは割愛して、ポイントに直行します:インスタンス化するために明示的な特殊化を必要とするような関数の存在をどのように検出できますか?template<typename T, typename U> T bar(U);