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
,同样.
uniapp
的缺点,可能是要上传一份代码
吧.