我需要生成的东西,可以作为一个独特的处理,为用户定义的类型(结构或类)在 D编程语言.好这将是一个编译时间可计算的价值。我要处理,涉及的名称的类型以及改变,如果内部结构(数据布局)的类型的变化,但保持同样对于大多数其他编辑(包括汇编相同的类型进入不同的应用程序).

这不是一个安全的事情,因此它不需要很难绕过或者任何东西

我现在的想法是使用一串喜欢的东西MD5hash类型的名称和成员类型和名称。

任何想法

有帮助吗?

解决方案

考虑这个了一下之后,我认为这将是一个可行的办法(注意:这仅仅是伪代码):

UniqueId(Type) = Type.stringof ~ MemberIds!(Type.tupleof)

UniqueId(Type) if( Type is builtin ) = Type.stringof

MemberIds(M, Ms...) = "," ~ UniqueId!(typeof(M))
                      ~ "@" ~ ToString!(M.offsetof)
                      ~ ":" ~ M.stringof
                      ~ MemberIds!(Ms)

即,构造从类型的名称的唯一ID(您可能需要砍掉模块和封装,不能确定),和每个成员的类型的ID,偏移量和名称。

根据你想要什么,你可以删除成员的名字。

其他提示

一类型的全限定名应该是唯一的。这是相同的typeid的(T)的ToString。这是的的一样T.stringof - T.stringof将删除任何模板实例并不会给完全合格的名称

在解决方法是使用demangled(T.mangleof)在编译时和typeid的(T)在运行时的ToString。

typeid的表达将返回所属类别的一个唯一的实例宾语。理论上,应该可以使用所属类别对象作为类型的唯一标识符值的地址。

您知道,你可以硬编码修订入式,如“常量REV = 173;”,则每次更改布局时更新它,然后混合与类型名称出示你的标识符

这是一个有点麻烦,因为它需要手动更新,但你可以脚本加以更新时SVN DIFF识别该类中的变化而自动上提交。而且这可能是最简单的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top