[英]Static member of class with private constructor
我正在上課,應該可以解決C ++的一些小缺陷,例如比較具有定義的精度的double
與其他double
,等等。
我有名稱空間Utilities
,其中存在class Double
:
namespace Utilities {
void init();
class Double {
public:
//! @brief Compares the equality of two doubles with defined precision
static bool fuzzyCompare(const double &d1,const double &d2);
static void setFuzzyComparePrecision(int precision);
private:
//! @brief Private constructor
Double() {};
static int fuzzyComparePrecision_;
};
}
我想這個class
僅包含static
成員,不instanciable。 當前的想法是在void main()
調用Utilities::init()
函數,該方法將初始化class Double
成員的默認值。
是否可以設置默認的fuzzyComparePrecision_
而不在void main()
調用函數init()
void main()
? 或者換句話說,是否可以在沒有Double
實例且沒有調用其他函數(如init()
情況下設置fuzzyComparePrecision_
默認值?
謝謝你的幫助!
這不僅是可能的,而且(幾乎)需要這樣做。
從C ++ 17開始,您可以將任何靜態變量聲明為inline
,並在類主體中對其進行初始化:
class Double {
private:
inline static int fuzzyComparePrecision_ = 0;
};
在C ++ 17之前,每個*靜態類成員都需要一個類外定義。
它可以(通常應該)與初始化結合使用,以避免處理未初始化的變量。
您必須提供以下內容(在cpp文件中):
int Utilities::Double::fuzzyComparePrecision_;
但是您也可以通過初始化擴展它:
int Utilities::Double::fuzzyComparePrecision_ = 0;
*有一些例外const
static
成員可以在類主體中使用另一個常量表達式進行初始化。
要初始化靜態成員變量,您有兩種方法:
inline static
成員變量來執行此操作: class Double { private: inline static int fuzzyComparePrecision_ = 2; }
class Double { private: static int fuzzyComparePrecision_; }
int Double::fuzzyComparePrecision_ = 2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.