根据 20.8.5 §1,std::less
是一个具有成员函数的类模板:
template<typename T>
struct less
{
bool operator()(const T& x, const T& y) const;
// ...
};
这意味着我在实例化模板时必须提及类型,例如std::less<int>
. 为什么不是std::less
带有成员函数模板的普通类呢?
struct less
{
template<typename T, typename U>
bool operator()(const T& x, const U& y) const;
// ...
};
然后我可以简单地传递std::less
给没有类型参数的算法,这可能会变得很麻烦。
这仅仅是出于历史原因,因为早期的编译器(据说)不能很好地支持成员函数模板(甚至可能根本不支持),还是有更深层次的东西?