如果我限定在模块级结构,我可以参考尚未定义的结构。结构声明为了
struct S {
ComesLater c;
}
struct ComesLater {}
但是如果我做同样的unittest
或功能块里面,这是行不通的:
unittest {
struct S {
ComesLater c;
}
struct ComesLater {}
}
Error: undefined identifier 'ComesLater'
这是为什么?我如何在函数内部获得与订单无关的声明? d中是否有某种前瞻性声明?我需要这个,因为我使用mixin生成结构,并且按照它们内部依赖性的顺序对声明进行排序,如果存在循环引用结构,那么这将非常费力,有时甚至是不可能的。 (使用指针)内
不错!恐怕我无法使用这种解决方法,因为我可能会在同一个作用域内生成多个这样的结构块,并且这只能运行一次。 (那么持有人将会被定义。)你有没有可能得到某种前瞻性声明?或者定义一个没有执行顺序的代码块,但不会改变当前的作用域? (类似于持有者) – Tamas
我能够将结构放在一个'mixin模板Foo(){static struct S {C c; }} static struct C {}}'然后调用'mixin Foo!();'然后我得到独立的顺序块,没有额外的持有者! =) – Tamas
那么,每次创建名称时都可以更改名称。 Holder,Lynch,Mukasey,Gonzales :)或者Holder1,Holder2。 __LINE__技巧可以帮助您在字符串mixin生成代码中创建独特的名称。您也可以尝试使持有者成为'mixin template'而不是'struct',然后在声明后立即将其混合,以便将其符号引入父范围。 –