我想了解更多關於D的編譯時間評估,並瞭解它的模板,mixins,屬性等如何工作。我想嘗試做的一件事是找出將類的成員標記爲可序列化或可從數據庫加載的優雅方法。在下面的示例中,我創建了一個元組,列出在讀取或(稍後)序列化實例時要使用的成員。用戶定義屬性和編譯時間評估設置類成員變量
我的第一個問題是,這是元組的正確用法嗎?其次,如果是這樣,是否有一種方法可以在編譯時使用我已分配給相關成員變量的用戶定義屬性自動生成此元組?我已經瀏覽了各種文檔頁面,如http://dlang.org/attribute.html和http://dlang.org/phobos/std_traits.html,但我似乎無法弄清楚如何正確使用它們(即循環遍歷類的成員並確定哪些變量具有所需的屬性)。我也不太確定,如果我完全錯誤地認爲應該如何使用屬性。任何建議最好的方式去這個將不勝感激。
enum ENCODABLE = 1;
alias string[string] Row;
template Tuple (T...) { alias T Tuple; }
class A {
@(ENCODABLE) string name;
@(ENCODABLE) int x;
int* p;
alias Tuple!("name","x") encodables;
this(Row row) {
foreach (var; encodables) {
__traits(getMember, this, var) = to!(typeof(__traits(getMember, this, var)))(row[var]);
}
}
}
void main() {
Row row = ["name":"Asdf", "x":"120"]; // Simulated database row
auto a = new A(row);
writefln("%s,%d,%d", a.name, a.x, a.p); // Asdf,120,null
}