簡體   English   中英

模板類中的靜態成員初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM