如果我限定在模塊級結構,我可以參考尚未定義的結構。結構聲明爲了
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',然後在聲明後立即將其混合,以便將其符號引入父範圍。 –