クラスの特定のテンプレートインスタンス化に対してのみメンバー関数を宣言できますか?私はそれをしたい理由はここにある:クラスの特定のテンプレートインスタンス化のメンバー関数のみを宣言する
// Polynomial<N> is a polynomial of degree N
template<int N>
class Polynomial {
public:
//... various shared methods e.g...
double eval(double x) const;
Polynomial<N-1> derivative() const;
Polynomial<N+1> integralFrom(double x0) const;
// ... various shared operators etc.
double zero() const; // only want Polynomial<1> to support this
// only want Polynomial<2> and Polynomial<1> to support the following
// because the solutions rapidly become too difficult to implement
std::vector<double> zeros() const;
std::vector<double> stationaryPoints() const { return derivative().zeros();}
private:
std::array<double,2> coeffs;
}
私の現在の回避策はただN>2
ためPolynomial<N>::zeros()
から例外をスローすることですが、コンパイル時に問題を検出するために、素敵だったでしょう。
テンプレートの特殊化は可能ですか? – Pumkko
C++ 11が利用できる場合、 'static_assert(N <= 2、"不正なテンプレート引数 ")'を 'throw'の代わりに使用することができます。コンパイル時に望ましくない機能を防止します。 – ilotXXI
とにかく特殊化が必要です( 'Polynomial'のため) –