如何创建一个采用std::less<T>
或std::equal_to<T>
等比较模板的类,如std::multiset
和std::set
?
答案 0 :(得分:0)
template <class T, class Comparator = std::less<T>>
class MyClass
{
//...
}
在成员函数中,类似于: -
void MyClass::Myfun(X x, Comparator mycomp = Comparator())
{
if (mycomp(data1,data2))
//...
}
答案 1 :(得分:0)
这可能有所帮助:
template <class T, class Comparator = std::less<T>>
class MyClass
{
bool compare(const T& lhs, const T& rhs) const { return Comparator()(lhs, rhs); }
// stuff
};
class A
{
public:
bool operator < (const A& rhs) const;
};
MyClass<A> myClass;
答案 2 :(得分:0)
STL容器实际上存储了比较器的一个实例,所以你想要的更接近这个:
template <class T, class Comparator = std::less<T>>
class MyClass : private Comparator
{
public:
MyClass() {}
MyClass( const Comparator& compare ) : Comparator( compare ) {}
bool compare(const T& lhs, const T& rhs) const
{
return static_cast<Comparator>(*this)(lhs, rhs);
}
// stuff
};
class A
{
public:
bool operator < (const A& rhs) const;
};
MyClass<A> myClass;
请注意,在Comparator
不包含任何状态的情况下,您应该使用私有继承来允许空基本优化来消除开销。