2014-11-25 161 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

相关问题