2403d,无串插件传播uda

原文
是否可在没有串插件时传播UDA?

为了让它没有模板插件运行,我需要编写一个递归模板(在模板参数和UDA实例化结构上递归),它考虑了以下情况:普通类型,模板化类型,枚举(C风格),枚举值编译时常量等.
这是正确的,还是有无法只抓取编译时别名或枚举,而不给每个"类型"特殊处理.
模板插件是否容易受到名字冲突的影响?

我正在试从另一个结构继承结构.我想修改每个字段,使其类型从某个T变为Nullable!T,并保留所有字段名UDA.

如果在模块级可见你的类型,这很容易,而插件是好工具.只是有点不适合隐藏类型类型.

struct MyUDA { int q; }
struct Foo { int f; }
struct MyStruct {
    @MyUDA(3) int x;
    @MyUDA(4) Foo f;
    @MyUDA(5) @MyUDA(7) string s;
}
auto generateUDAs(A...)() {
    string[] udaStrs;
    static foreach (uda; A)
        udaStrs ~= "@(" ~ uda.stringof ~ ")";
    return udaStrs;
}
struct Wrapped(S) {
    static foreach (idx, field; S.tupleof) {
        //可用`pragma(msg,format(...))`来预览
        mixin(format("%s %s %s;", generateUDAs!(__traits(getAttributes, field)).join(' '), Nullable!(typeof(field)).stringof, field.stringof));
    }
}
void main() {
    MyStruct s;
    s.x = 3;
    s.f = Foo(1);
    s.s = null;
    Wrapped!MyStruct w;
    w.x = s.x;
    w.f = s.f;
    w.s = s.s;
    w.x.nullify;
    w.f.nullify;
    w.s.nullify; //串,对象已可为`null`了
    static assert(__traits(getAttributes, w.s) == AliasSeq!(MyUDA(5), MyUDA(7)));
}

如果绝对必须,你可以:

enum WrapMixin = q{
    struct Wrapped(S) {
        static foreach (field; S.tupleof)
            mixin(format("%s %s %s;", generateUDAs!(__traits(getAttributes, field)).join(' '), Nullable!(typeof(field)).stringof, field.stringof));
    }
};
void main() {
    struct MyUDA { ... }
    struct MyStruct { ... }
    mixin(WrapMixin);
    Wrapped!MyStruct w;
}

:是否可在没有串插件时传播UDA?

@(__traits(getAttributes, thingYouWantToForward))
void yourNewThing() {}

模板插件是否容易受到名字冲突的影响?
在此

相关推荐

  1. 2403d,传播uda

    2024-03-17 02:06:02       21 阅读
  2. 2401编辑器,好

    2024-03-17 02:06:02       47 阅读
  3. 2401llvm,clang

    2024-03-17 02:06:02       37 阅读
  4. 2402d,d变量2

    2024-03-17 02:06:02       31 阅读
  5. 自定义删除依赖文件的webpack

    2024-03-17 02:06:02       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 02:06:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 02:06:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 02:06:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 02:06:02       20 阅读

热门阅读

  1. 条款09:绝不在析构和构造中调用virtual函数

    2024-03-17 02:06:02       20 阅读
  2. 远程过程调用-buttonrpc源码解析1-序列化

    2024-03-17 02:06:02       17 阅读
  3. git reset

    2024-03-17 02:06:02       21 阅读
  4. 2、计划任务不显示UI的问题

    2024-03-17 02:06:02       18 阅读
  5. 什么是UUID?

    2024-03-17 02:06:02       24 阅读
  6. Vue v-if 和 v-show的区别

    2024-03-17 02:06:02       21 阅读
  7. openssl3.2 - exp - generate ecc priv key

    2024-03-17 02:06:02       20 阅读