Java 정적 블록은 클래스의 정적 멤버를 초기화하는 편리한 방법을 제공합니다. 그러나 C에는 클래스 내에 명시적인 정적 블록 메커니즘이 부족합니다. 이 문제를 해결하기 위해 두 시나리오 모두에 대해 동등한 솔루션을 제시합니다.
C는 변환 단위에서 클래스 외부의 정적 블록을 허용합니다. 범위. 매크로 기술을 사용하여 다음과 같은 블록을 정의할 수 있습니다.
<code class="cpp">static_block { // Initialization code }</code>
이 시나리오에서는 다음을 달성할 수 있습니다. 싱글톤 디자인 패턴의 변형을 사용하여 클래스 내에서 정적 멤버 초기화:
<code class="cpp">class StaticInitialized { static bool initialized; virtual void initializeStatics(); }; class MyClass : private StaticInitialized { static int field1; static int field2; void initializeStatics() { // Initialization code } };</code>
이 접근 방식은 클래스의 첫 번째 인스턴스화 시 호출되는 비정적 생성자를 활용하여 정적 멤버를 초기화합니다.
해결책에는 함수 호출로 초기화되는 더미 변수를 정의하는 것이 포함됩니다. 정적 블록 코드는 이 함수의 본문 내에 배치됩니다. 이렇게 하면 다른 정적 블록과의 충돌이 방지됩니다. 사용된 매크로 기계는 각 블록의 고유성을 보장합니다.
위 내용은 C에서 Java 정적 블록을 어떻게 모방할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!