2014-11-25 74 views
2

在C++中,我可以這樣做:D是否具有與C++ nullptr_t等效的功能?

void func(void *something) { 
    cout << "something" << endl; 
} 

void func(nullptr_t) { 
    cout << "nullptr_t" << endl; 
} 

int main() { 
    int nothing = 5; 
    func(&nothing); 
    func(nullptr); 
    return 0; 
} 

,輸出:

東西
nullptr_t

這樣我就可以特例nullptr_t。

在d,我有兩個功能:

void func(void* pod) { 
    cout << "pod" << endl; 
} 

void func(Object obj) { 
    cout << "Object" << endl; 
} 

所以調用func(null)時如何解決的不確定性?

+0

請不要使用nullptr_t來解決歧義。使調用者明確地提及類型,或者通過強制轉換或首先將其分配給變量。 – Cubic 2014-12-18 04:51:47

+0

爲什麼不能.......? – bitwise 2014-12-18 10:56:36

+0

因爲這將只適用於文字。很可能,如果有人用'null'文字調用你的函數,他們就意味着選擇兩個重載中的一個,而不是'nullptr_t'重載。並且通過提供'nullptr_t'重載,你會默默地拋棄那個錯誤。 – Cubic 2014-12-18 15:11:41

回答

7
void func(typeof(null)) {} 

null文本是d的一個特殊類型,它可以特異性地與typeof運營商處獲得。

請注意,這將只捕獲一個null文字 - 它不會捕獲空對象或空指針變量。

+0

想象一下,如果我們發現D只是針對這種情況實現了依賴類型,那麼就會有驚喜... – Cubic 2014-12-18 04:52:41

相關問題