理解d写一次类型

有时,循环内设置值,有时可抽象为λ,但在静态环境中不行.且置值时,我还要处理,而不是直接返回,但这又有另一个循环.
用例是,我的类型集中,有个属性.要验证他们都相同,并取出其值.
是否有人有写一次类型,即允许仅初化一次类型,就像初化值一样,运行时决定是否该类型.
类似可重绑定/尾常,头不必为,只是需要复制进常引用

struct WriteOnce(T) {
    const T payload;
    const bool isSet;

    void opAssign(U : T)(U data)
    in (!isSet){
        assert(!isSet);
        @trusted() {
            *(cast()&payload) = data;
            *(cast()&isSet) = true;
        }();
    }
}
//上为hs.t
struct ColumnDef(T)//列类型
{
    const TableDef table;//表,源,常
    ExprString expr;//描述表达式,
    alias type = T;
}
//计算列,定义1个从其他列计算出的类型的来定义列.相关了.
ColumnDef!T exprCol(T, Args...)(Args args)
{
    //先找所有列,确保定义都来自该表
    //列不能有多个表
    const(TableDef)* tabledef;
    foreach(ref arg; args)
    {
        static if(is(typeof(arg) == ColumnDef!U, U))
        {
            if(tabledef && arg.table != *tabledef)
                throw new Exception("式中不能定义多表");
            else
                tabledef = &arg.table;
        }
    }

    assert(tabledef !is null);

    //构建表达式串
    ExprString expr;
    foreach(ref a; args)
    {
        static if(is(typeof(a) == string))
            expr ~= a;
        else
            expr ~= a.expr;
    }
    return ColumnDef!(T)(*tabledef, expr);
    //用的是指针抽象.
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值