如何明確初始化靜態成員
問題:
在C 中,靜態成員模板類別僅在具體實例化中明確使用時才會初始化。有沒有辦法在不建立實例或要求使用者直接指定成員的情況下強制它們初始化?
答案:
是的,可以強制透過使用以下技術之一來初始化靜態成員:
使用包裝類型:
<code class="cpp">template<typename T, T> struct value { }; template<typename T> struct HasStatics { static int a; // we force this to be initialized typedef value<int&, a> value_user; }; template<typename T> int HasStatics<T>::a = /* whatever side-effect you want */ 0;</code>
使用語法技巧:
<code class="cpp">template<typename T, T> struct var { enum { value }; }; typedef char user; template<typename T> struct HasStatics { static int a; // we force this to be initialized static int b; // and this // hope you like the syntax! user :var<int&, a>::value, :var<int&, b>::value; }; template<typename T> int HasStatics<T>::a = /* whatever side-effect you want */ 0; template<typename T> int HasStatics<T>::b = /* whatever side-effect you want */ 0;</code>
這兩種技巧都透過引入觸發成員定義評估的依賴關係來強製靜態成員的初始化。請注意,第二種技術涉及非常規語法,可能不適合所有情況。
以上是您可以在不實例化的情況下強制初始化模板類別中的靜態成員嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!