私はクラスの宣言と実装を分離したいと思っています。クラステンプレートと関数の実装もヘッダーファイルに入っていることがわかりますが、それは問題ではありません。デフォルトのテンプレートパラメータを使用してテンプレートクラスの宣言と実装を分離する方法は?
私は、このクラスを実装するトラブルを抱えている:
template <size_t S, std::enable_if_t<(S > 0), int> = 0>
class Foo {
public:
Foo();
}
は、これまでのところ、私が試してみました:
エラーC3860で失敗しました
template<size_t S> Foo<S>::Foo() {}
:テンプレート引数リスト以下のクラスをテンプレート名は、テンプレートパラメータリストで使用される順序でパラメータをリストする必要があります
エラーC2976: 'フー< S、< __formal >>':テンプレート引数リスト:
エラーC3860で失敗した数が少なすぎるテンプレート引数
と
template<size_t S, int i> Foo<S, i>::Foo() {}
次のクラステンプレート名は、テンプレートパラメータリストで使用される順序でパラメータをリストする必要があります
エラーC3855: 'フー< S、<無名のシンボル>>':テンプレートパラメータ '__formalは' 私も
にテンプレート宣言を変更しようとした宣言
template <size_t S, typename = std::enable_if_t<(S > 0)>>
と互換性がありません。
も最初のエラーメッセージで失敗しました。
これを行う正しい方法は何ですか?
実際には、状況は少し複雑です。私は例のためにそれを愚かにしました。無効な値をすべて列挙することは実用的ではありません。しかし、 'static_assert'についての良い点です。私は 'enable_if'を試してみることに興奮していると思います。 – IchBinKeinBaum