我想寫一個定點運算類,其中點位置和基本類型是模板部分專門明確的模板特
template <int P, typename T>
class basic_fixedpoint{
//stuff
};
我也想公開一個模板隱構造函數,然後專門爲各種類型
//inside basic_fixedpoint
template <typename U>
basic_fixedpoint(const U& arg);
在其他地方我將實施整型,浮點,雙等專業化不過,我也希望爲不同的P和T.任何類型basic_fixedpoint的通用專業化我怎樣才能做到這一點的模板模板專業化?
template <int P, typename T> //for the class whose constructor i specialize
template <int OP, typename OT> //for the parameters of the argument
basic_fixedpoint<P, T>::basic_fixedpoint<basic_fixedpoint<OP, OT> >(const basic_fixedpoint<OP, OT>& arg)
: /*init things here*/ {} // this fails
我試圖避免超載的構造,以便在頭部呈現一個單一的界面,告訴用戶「這一類將乾淨地從你給任何類型它自身建設,否則將無法編譯並給你一個難以理解的段落長錯誤信息「
作爲一個子問題:這個類還實現了基本的運算符int(),運算符float(),運算符double()轉換以及重載算術運算符和數學函數提供。當然,每當我嘗試用這個類調用任何東西時,調用都是不明確的,因爲每個可能都是可用的。
我該如何保持這個類的完全靈活性,但仍然允許無痛的,毫不含糊的重載函數調用的行爲正確(而不是總是將我的類轉換爲double和back)?