問題タブ [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 投票する
0 に答える
57 参照

c++ - 非型テンプレート パラメーターを使用した関数テンプレートの特殊化

関数テンプレートを使用して、次元行列の行列式を計算しました。

関数テンプレートの次の特殊化を使用して、再帰を終了します。

しかし、特殊化はコンパイルを通過できません。1 つのエラーが発生しました。

エラー C2912: 明示的な特殊化 'double determinant<1>(double [][1])' は関数テンプレートの特殊化ではありません

どうしたの?どうすれば終了できますか?


2017/6/23 コード修正、GCCで動くようになりました!

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

c++ - 関数テンプレート (クラス テンプレートのメンバー) を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

私は取り組んでいますVisual Studio 2015 community edition

次のような単純なクラスがあるとしましょう:
(以下の例は、必要なものがすべて含まれているため、コンパイル可能である必要がありますが、残念ながらエラーが発生します)。

エラー:

私は自分自身を初心者の趣味のプログラマーと考えているので、確かに間違っていますが、 とerase<class_foo<T>::tag_aaa>()の両方erase<class_foo<T>::tag_bbb>()が関数の明示的な特殊化であると信じていtemplate <typename tag> void erase();ます。そのため、それらは許可されています。このエラーは構文の誤りによるものだと思いますが、エラーが見つかりません。

質問:

  • 私がやろうとしていることは許可されていますか?
  • はいの場合、何が間違っていますか?
  • はいの場合、この関数を特殊化するための正しい構文は何ですか ( erase)?