テンプレートパラメータがクラスと同じタイプの場合、特殊なコンストラクタを必要とするテンプレートクラスがあります。以下のコードはコンパイルされません。
タイプがDualの場合に、特定のコンストラクターの使用を指定するための正しい構文は何ですか?特に、テンプレートパラメータがDual型の場合は、初期化子リストのメンバー'real'を初期化する必要がありますが、そうでない場合(たとえば、double型)は初期化できません。
template<class X> class Dual {
public:
X real;
size_t N;
std::vector<X> imag;//don't know N at compile time
Dual(size_t _N);
};
template <class X>
inline Dual<X>::Dual(size_t _N): N(_N), imag(N, 0.0) {}
template <class X>
inline Dual<Dual<X> >::Dual(size_t _N): real(_N), N(_N), imag(_N, 0.0) {}
//syntax error:
//error: cpptest.cpp:20:24: error: C++ requires a type specifier for all declarations
//inline Dual<Dual<X> >::Dual(size_t _N): real(_N), N(_N), imag(_N, 0.0) {}
//~~~~~~
int main(){
Dual <double> a(5);
Dual< Dual < double>> b(5);
}