根据C++ ISO规范,§26.2/2:
实例化模板
为什么标准作者明确添加此限制?例如,这使得如果您创建
这个限制有理由吗?如果要使用自定义类型实例化
我主要问这个问题是因为这个早期的问题,其中OP对于
实例化模板
complex
的效果对于除float
, double
或long double
之外的任何类型都是未指定的。为什么标准作者明确添加此限制?例如,这使得如果您创建
complex<int>
或complex<MyCustomFixedPointType>
时会变得不确定,并且似乎是一种人为的限制。这个限制有理由吗?如果要使用自定义类型实例化
complex
是否有解决方法?我主要问这个问题是因为这个早期的问题,其中OP对于
complex<int>
的abs
给出了奇怪的输出而感到困惑。话虽如此,考虑到我们还可能使用固定点类型、高精度实数等来创建complex
数,这仍然不太合理。
T
需要支持什么精度,以便允许complex<T>
。如果您为您的无限精度或定点算术类型重载超越函数和abs()
(在C++11中终于被允许(C++98允许完全特化,但不允许在std
命名空间中重载名称)),它将正常工作。我认为在实现中使用__isinf
而没有一种方法来专门为您的类型进行特殊化是实现质量问题。即使这样,您仍然可以明确地为您的类型专门化受影响的方法。 - Marc Mutz - mmutz