我专门针对数据类型使用“少”(谓词)。
代码如下:
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 块中。