如何显式初始化静态成员
问题:
在 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中文网其他相关文章!