我有错误
limits:30:29: error: 'numeric_limits' is not a template
在文件中,它为特定类重载std :: numeric_limits:
// file "limits"
#include <limits>
namespace std
{
template<typename T> struct numeric_limits<XX::YY<T> > : public
numeric_limits<typename XX::YY<T>::ZZ>
{
private:
<...>
什么可能是个问题?
答案 0 :(得分:3)
您正在尝试创建一个继承自std::numeric_limits
的{{1}} - 但是当您到达std::numeric_limits
部分时,您已经宣布了自己的模板(即仍然不完整)已经命名为public numeric_limits...
,所以它试图从自身继承而不是现有的numeric_limits
。
std::numeric_limits
并非作为基类,并且不提供任何虚函数,因此从它继承是无用的。要使std::numeric_limits
正确处理您的特定类,您需要为该类型定义numeric_limits的特化:
numeric_limits
请注意,这是允许您向#include <limits> // get base template definition + standard specializations
namespace std {
template<> // define your specialization
class numeric_limits<MyType> {
// ...
};
}
命名空间添加内容的唯一情况之一 - 在用户定义的类型上添加现有模板的新专业化。
答案 1 :(得分:2)
您的文件不应该被命名为limits
,因为它会阻止包含正常的系统标头。那,我甚至不确定重新定义标题是否合法。
就个人而言,我会将此定义放在与XX::YY
答案 2 :(得分:0)
numeric_limits不会尝试继承自己。
该文件可以命名为“limits”,直到它不在包含路径中。
问题是“限制”在包含路径中。所以它试图包括自己,而不是标准限制。结果,在文件的开头根本没有声明numeric_limits。
我从include路径中排除了目录,一切正常。