d类成员的默认值
class X
{
this()
{
assert(false);//
}
int x = 3;
}
在X中
,我不能添加或更改
方法.
编译时,如果有X
和"x"
字段名,我如何获得3
,对构,可:
X.init.x
//或
__traits(getMember, X.init, "x")
工作.但对类,它会抱怨解空引用
.
__traits(initSymbol)
不管用.
不可能.与构的初值
符号不同,类版
不一定代表有效实例状态
,它只是调用构造器
(构造有效
实例)前的原始负载
,且在实例化对象后,重置为死状态
内存(以避免死指针
让其他GC
引用活跃).
如果在CTFE
中构造器
工作,可:
int get() {
scope x = new X;
return x.x;
}
enum bla = get();
来取(如在构造器
中修改,则与静初化不同
的)有效实例
的x
值.
为何要编译时
静初化?__traits(initSymbol)
是运行时辅助块传输
.
在SQL
数据库中,(与UDA
一起使用时)我想按默认值
使用静初化器
.
用当前设计,不能从编译时
移动到运行时
,因为在另一个程序
(迁移器
)中使用序化并输出
创建的类型描述
.现在,它只是取生成的编译时构
,然后直接转储
到JSON
序化程序中.
可能有点滥用
类,但它们最简单:
1,更容易编写和使用is(T : Model)
和void foo(T : Model)(T x)
类型特化.
2,允许注入
方法到类型
中(使用this This
,模板参数
甚至可得到真实类型
)
3,对用户
,这是最容易和漂亮
类型.mixin Model
太麻烦,且因为会破坏隐式生成
的构造器
,而禁止定义自定义字段
.
好的,是什么阻碍了这些模型的CTFE
构造呢?
在Model
中有个对子类型
的所有字段运行可选的如下λ
用定属的模板基构造器
.
@constructValue!(() => Clock.currTime + 4.hours)
不能用继承类型
中的默认构造器
替换这些吗?
class MyModel : Model {
int x = 123; // 静态初化
SysTime validUntil; // 构造器中动态初化
this() {
validUntil = Clock.currTime + 4.hours;
}
}
是可CTFE
构造该实例的,且对validUntil
字段,有效实例会生成期望值.如果要了解此类动态生成字段
(如,在此时间关键
示例中),可查看@dynamicallyInitialized
用定属.如果还要,对已构造
实例,可重运行
这些当前@constructValue
λ,则创建新的实例
并复制新字段值
.
哦,时间敏感
示例显然不支持CTFE
.如果这样,则不必用@constructValue
了.
对CTFE
实例,如果可接受跳过此额外初化
,还可在构造器
中用if (__ctfe)
跳过跑@constructValue
λ.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现