問題タブ [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++ - 非型テンプレート パラメーターを使用した関数テンプレートの特殊化
関数テンプレートを使用して、次元行列の行列式を計算しました。
関数テンプレートの次の特殊化を使用して、再帰を終了します。
しかし、特殊化はコンパイルを通過できません。1 つのエラーが発生しました。
エラー C2912: 明示的な特殊化 'double determinant<1>(double [][1])' は関数テンプレートの特殊化ではありません
どうしたの?どうすれば終了できますか?
2017/6/23 コード修正、GCCで動くようになりました!
c++ - 関数テンプレート (クラス テンプレートのメンバー) を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?
私は取り組んでいますVisual Studio 2015 community edition
次のような単純なクラスがあるとしましょう:
(以下の例は、必要なものがすべて含まれているため、コンパイル可能である必要がありますが、残念ながらエラーが発生します)。
エラー:
私は自分自身を初心者の趣味のプログラマーと考えているので、確かに間違っていますが、 とerase<class_foo<T>::tag_aaa>()
の両方erase<class_foo<T>::tag_bbb>()
が関数の明示的な特殊化であると信じていtemplate <typename tag> void erase();
ます。そのため、それらは許可されています。このエラーは構文の誤りによるものだと思いますが、エラーが見つかりません。
質問:
- 私がやろうとしていることは許可されていますか?
- はいの場合、何が間違っていますか?
- はいの場合、この関数を特殊化するための正しい構文は何ですか (
erase
)?