2016-06-10 77 views
2

我有一個類A這需要另一個類B作爲模板參數,我需要得到B的構造爲了做(有點僞代碼):如何獲取類的構造方法?

class A(B) 
{ 
    import std.typecons : Tuple; 
    import std.traits : Parameters; 
    Tuple!(Parameters!B) _args; 
    this(Parameters!B args) 
    { 
     _args = args; 
    } 
} 

存儲參數的構造函數和後使用存儲在_args中的參數構造類B的對象。

這幾乎是命令模式。

有沒有辦法讓B的構造函數得到它的Parameters? 還是有更好的方法來實現延期對象構造?

+0

試乙.__ ctor的引用它..... –

回答

4

是,構造函數的內部名稱是__ctor

class C 
{ 
    this(int a, string b) { } 
} 

import std.traits; 

pragma(msg, Parameters!(C.__ctor)); 

此輸出:

(int, string) 
+0

謝謝,我意識到,我hadn」 t在我傳遞給'A'的類中包含了一個構造函數,這使得'B .__ ctor'在這種情況下不存在。 – clinei

+1

請注意,如果存在多個構造函數,則可以使用'__traits(getOverloads,C,「__ctor」)'。 'MemberFunctionsTuple!(C,「__ctor」)'不管什麼原因,都會返回一個空列表。不知道這是故意的。 – rcorre