我有一個模板類,需要一個專門的構造函數時,模板參數是類相同的類。下面的代碼不會編譯。嵌套模板專業
當類型爲Dual時,指定使用特定構造函數的正確語法是什麼?特別是,當模板參數的類型爲Dual時,我需要在初始化程序列表中初始化成員'real',但當它不是時(例如,輸入double),則不需要初始化成員'real'。
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);
}
相關但不是直接原因:您沒有默認的構造函數。你如何處理沒有默認構造函數的類型的默認構造,就像你在嵌套聲明中一樣? –
這就是我試圖用專業化解決的問題。類型X是一個雙重的,它需要調用1參數的構造函數或其某些浮點類型,在這種情況下它不會(稍後分配值)。 –
這應該是顯而易見的:將一個默認的構造函數添加到你的'Dual'類中。 –