d的静态模板,启动时初化

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,同样.

你可能感兴趣的:(笔记)