[英]Static member initialization in a template class
我需要初始化一個模板類的內部靜態布爾,我試圖做到像這樣 。 我能看到的唯一區別是我對類型參數T有一個約束,但這會導致編譯錯誤,為什么? 我該如何解決?
代碼如下:
template<class T, class = typename enable_if<is_any_integral<T>::value>::type>
class fraction {
static bool auto_reduce;
// ...
};
template<class T, class = typename enable_if<is_any_integral<T>::value>::type>
bool fraction<T>::auto_reduce = true;
錯誤是:
錯誤:嵌套名稱說明符'
fraction<T>::
'用於聲明未引用到類,類模板或類模板的部分專業化中
bool fraction<T>::auto_reduce = true;
也許更簡單
template<class T, class V>
bool fraction<T, V>::auto_reduce = true;
當你寫
template<class T, class = typename enable_if<is_any_integral<T>::value>::type>
class fraction
您說fraction
是具有兩個類型模板參數的類; std::enable_if
如果part可以用於為第二個參數分配默認值(並允許啟用/不啟用SFINAE工作),但是fraction
是並且仍然是帶有兩個參數的模板class
,則必須引用兩個,並且有無需為第二個參數初始化auto_reduce
重復啟用/不啟用/默認部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.