정적 멤버를 명시적으로 초기화하는 방법
질문:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!