인스턴스 조작이나 파생 클래스 개입 없이 정적 멤버를 강제로 초기화하는 방법
정적 클래스를 초기화하려는 시나리오를 고려하세요. 인스턴스를 생성하지 않거나 파생 클래스를 포함하지 않더라도 특정 클래스가 인스턴스화될 때 멤버입니다. 이를 달성하기 위한 전략을 살펴보겠습니다.
템플릿 트릭 사용
템플릿 트릭을 도입하면 인스턴스를 요구하거나 파생 클래스를 변경하지 않고도 정적 멤버 초기화를 강제할 수 있습니다. 정수 참조와 해당 값을 매개변수로 사용하는 value라는 특수 템플릿 클래스를 생성하면 원하는 결과를 얻을 수 있습니다.
<code class="cpp">template<typename T, T> struct value { }; template<typename T> struct HasStatics { static int a; // We enforce initialization typedef value<int&, a> value_user; }; template<typename T> int HasStatics<T>::a = /* Desired side-effect */;</code>
구문 모호성 활용
또 다른 접근 방식은 C 구문의 모호성을 활용하는 것입니다. typedef와 중첩된 열거형의 영리한 조합을 사용하면 파생 클래스에 영향을 주지 않고 여러 정적 멤버를 강제로 초기화할 수 있습니다.
<code class="cpp">template<typename T, T> struct var { enum { value }; }; typedef char user; template<typename T> struct HasStatics { static int a; // We enforce initialization static int b; // And this one too // Syntax Shenanigans user :var<int&, a>::value, :var<int&, b>::value; }; template<typename T> int HasStatics<T>::a = /* Desired side-effect */; template<typename T> int HasStatics<T>::b = /* Desired side-effect */;</code>
이러한 기술은 인스턴스 조작 없이 정적 멤버를 초기화하는 효율적인 방법을 제공합니다. 또는 파생 클래스 수정.
위 내용은 C에서 인스턴스나 파생 클래스 없이 정적 멤버를 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!