我专门针对数据类型使用“少”(谓词)。

代码如下:

template<>
struct std::less<DateTimeKey>
{
   bool operator()(const DateTimeKey& k1, const DateTimeKey& k2) const
   {
      // Some code ...
   }
}

编译时(在Ubuntu 9.10上为g++ 4.4.1),出现错误:

不同 namespace 中的'template struct std::less'的特化

我进行了一些研究,发现有一个``解决方法'',其中涉及将特化包装在std namespace 中-即将代码更改为:
namespace std {
template<>
struct less<DateTimeKey>
{
   bool operator()(const DateTimeKey& k1, const DateTimeKey& k2) const
   {
      // Some code ...
   }
}
}

实际上,这会关闭编译器。但是,该解决方案来自5岁以上的工作人员(“伟大的”维克托·巴扎罗夫(Victor Bazarof)[不希望看到的双关语]。此修复程序仍然可行,还是有更好的解决方案,还是“旧方法”仍然有效?

最佳答案

仍然是这样做的方法。不幸的是,您无法像在类中那样在 namespace 中声明或定义函数:您需要将它们实际包装在 namespace 块中。

10-06 07:24