首页 >后端开发 >C++ >您可以在不实例化的情况下强制初始化模板类中的静态成员吗​​?

您可以在不实例化的情况下强制初始化模板类中的静态成员吗​​?

DDD
DDD原创
2024-11-01 15:37:30231浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn