【发布时间】:2012-12-02 00:46:58
【问题描述】:
今天才知道C++允许std::nullptr_t类型的非类型模板参数:
template<std::nullptr_t N> struct A { };
template<std::nullptr_t N> void f() { }
在我的一生中,我无法为这些提出任何明智的用例。任何人都可以为此提出理由吗?
【问题讨论】:
-
我不认为有一个用例,但是没有足够的伤害让它值得阻止它发生的麻烦。如果您确实停止了它,则必须确定 nullptr_t 根本不是类型,或您必须创建一个特殊情况来说明它不是允许作为模板的类型参数(并在编译器中执行相同操作以停止使用)。
-
@JerryCoffin 有一个明确的类型列表允许作为模板参数。所以目前有一种特殊情况说是允许作为模板参数的。
-
并不是我个人不喜欢这个问题,而是常见问题解答确实说“你应该只根据你所面临的实际问题提出实用的、可回答的问题。”...所以应该关闭它吗?
-
@Mehrdad:不,这对 Stack Overflow 来说是个好问题。好奇心是一个完全有效的“实际问题”;无论我们的老板是否要求我们这样做,我们都在这个领域进一步加深我们的知识。作为替代方案被解雇并不是提出问题的先决条件 - 事实上,通常那些问题非常糟糕。
-
FWIW,我是一名 C++ 程序员,知道为什么某些结构是 C++ 的一部分会增加我保持负责的可能性,而不是不知道。对我来说,这听起来像是一个现实生活中的实际问题。