作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
C++11 引入了 std::nullptr_t
以允许在传递 nullptr
常量的地方显式重载方法。我想要的是同样的东西,但使用旧的 NULL
(又名 0)。我觉得应该有一个解决方案,也许可以利用 SFINAE,但就我的生活而言,我想不出一个。
更清楚地说,我想要 3 种方法:
Foo(int*); //binds to an int pointer
Foo(std::nullptr_t); //binds to a nullptr constant
Foo(something); //should bind to NULL
something
应该是什么,这样对 Foo(NULL)
的调用才不会产生歧义?
我不希望 NULL 的方法重载绑定(bind)到任意整数
提前致谢
最佳答案
相同的 Foo(std::nullptr_t)
重载也适用于 NULL
。存在从任何 空指针常量到std::nullptr_t
的隐式转换。这包括 0
、0UL
,无论 NULL
被定义为什么,当然还有 nullptr
本身。
如果您只想消除 int*
与 nullptr_t
的歧义,那么我们可以修改重载解析规则。例如,使 Foo(int*)
成为模板:
template<int = 0>
void Foo(int*);
void Foo(std::nullptr_t);
重载时,非模板总是更适合模板。
关于c++ - 特定于 NULL 的参数解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53086772/
我是一名优秀的程序员,十分优秀!