首頁 > 後端開發 > C++ > 主體

您可以在不實例化的情況下強制初始化模板類別中的靜態成員嗎?

DDD
發布: 2024-11-01 15:37:30
原創
163 人瀏覽過

Can You Force Initialization of Static Members in Template Classes Without Instantiation?

如何明確初始化靜態成員

問題:

在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&amp;, 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&amp;, a>::value,
       :var<int&amp;, 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!