D语言是否有类似于C++的nullptr_t类型?

3

在C++中,我可以这样做:

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;
}

输出结果如下:

something
nullptr_t

因此我可以特别处理nullptr_t。

在D语言中,我有两个函数:

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

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

那么,当调用func(null)时,我该如何消除歧义呢?

请不要使用nullptr_t来解决歧义。让调用者明确地提到类型,可以通过先进行强制转换或将其分配给变量来实现。 - Cubic
因为这仅适用于字面量。如果有人使用“null”字面量调用您的函数,他们可能意味着选择两个重载之一,而不是一个“nullptr_t”重载。通过提供一个“nullptr_t”重载,您正在默默地丢弃该错误。 - Cubic
1个回答

8
void func(typeof(null)) {}

null字面量是D语言中的特殊类型,你可以使用typeof运算符来获取它。

请注意,这只能捕获null字面量,而不能捕获空对象或空指针变量。


想象一下,如果我们发现 D 仅仅为了这个情况而实现了依赖类型,那将会是多么惊人的事情啊... - Cubic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接