d의 정적 템플릿, 시작 시 초기화

6490 단어 필기
Regex!char staticRe(string reStr)()
	{
	    static struct Impl
	    {
		static Regex!char re;
		static this()
		{
		    re = regex(reStr);
		}
	    }
	    return Impl.re;
	}

	auto myFunc(string input) {
		...
    		auto result = input.replaceAll(staticRe!"foo(\w+)bar", `blah $1 bleh`);
		...
	}
를 가진 템플릿 함수로 실행할 때 전역 초기화 정규를 되돌려 템플릿으로 실례화합니다.ct 컴파일링이 없을 때 비용을 지불하지 않아도 됩니다. 프로그램이 시작될 때 실례화됩니다.등가 .그러나 우리는 에서 템플릿 함수 중 하나를 사용할 수 없다 .컴파일을 피할 때 생성 .전역 변수처럼 정적 필드입니다.가동 실례화를 보장하기 위해서. this ()main 전에 운행합니다.
	class Language { ... }
	Language curLang = ...;

	version(extractStrings) {
		private int[string] translatableStrings;
		string[] getTranslatableStrings() {
			return translatableStrings.keys;
		}
	}

	string gettext(string str)() {
		version(extractStrings) {
			static struct StrInjector {
				static this() {
					translatableStrings[str]++;
				}
			}
		}
		return curLang.translate(str);
	}

	...
	auto myFunc() {
		...
		writeln(gettext!"Some translatable message");
		...
	}

d버전gettext입니다.

좋은 웹페이지 즐겨찾기