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

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

c++ - ネストされたテンプレートの特殊化

テンプレートパラメータがクラスと同じタイプの場合、特殊なコンストラクタを必要とするテンプレートクラスがあります。以下のコードはコンパイルされません。

タイプがDualの場合に、特定のコンストラクターの使用を指定するための正しい構文は何ですか?特に、テンプレートパラメータがDual型の場合は、初期化子リストのメンバー'real'を初期化する必要がありますが、そうでない場合(たとえば、double型)は初期化できません。

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

c++ - テンプレートメンバーの特殊化を試みる「'<'トークンの前に期待される初期化子」

テンプレートクラス内にテンプレートメンバーを定義しようとしています。

ヘッダーファイルのフラグメントは次のとおりです。

したがって、テンプレートメンバーは定義されていますが、docopyメソッドを明示的に特殊化して、型がポインターの場合にディープコピーするようにします。メソッドテンプレートと特殊化を使用して、ヘッダーファイルから別のフラグメントを配置します。

コンパイラは次のエラーを送信します:'<'トークンの前に初期化子が必要です。

何が間違っているのか理解できません。何か助けはありますか?

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

optimization - GHCのSPECIALIZEプラグマを適切に使用するにはどうすればよいですか?(例:Identityを使用してモナディック関数から純粋関数を特殊化する。)

例として、リスト上にモナディックマップと非モナディックマップを記述したいとします。私はモナディックのものから始めましょう:

mapここで、コードを再利用して、 (コードを繰り返すのではなく)純粋なものを記述したいと思います。

明示的に書かれmap'ているかのように最適化するには何が必要ですか?map特に:

  1. 書く必要がありますか

    またはGHCは(完全map'に除外することによって)それ自体を最適化しますか?Identity

  2. 他に何か(より多くのプラグマ)を追加する必要がありますか?

  3. map'明示的に記述されたコードに対して、コンパイルがどの程度最適化されているかを確認するにはどうすればよいmapですか?
0 投票する
1 に答える
3932 参照

c++ - クラステンプレートの状態データメンバーであり、明示的に特殊化できるエンティティではありません

以下のコードでエラーが発生しました:

どうすれば修正できますか?

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

c++ - 列挙型に一致するクラス テンプレートの部分的なテンプレート特殊化を作成できますか?

次のような構文を提供する一連のクラステンプレートの明示的な特殊化によって強化された関数テンプレートがあります

(どこGetAs<t>に次のようなものがあります:

)

その型が列挙型の場合に特殊化しDesiredTypeて、返される型が列挙型 (または) の基になる型と一致するようにしたいと思いenum classます。

それは可能ですか、それともクライアントは基になる型を自分で指定する必要がありますか?


次のようなコードを許可しようとしています。

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

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);