如何创建一个类,该类采用比较器模板 likestd::less<T>
或std::equal_to<T>
likestd::multiset
并std::set
执行?
问问题
123 次
3 回答
0
template <class T, class Comparator = std::less<T>>
class MyClass
{
//...
}
在成员函数中,类似:-
void MyClass::Myfun(X x, Comparator mycomp = Comparator())
{
if (mycomp(data1,data2))
//...
}
于 2013-10-06T10:50:10.360 回答
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;
于 2013-10-06T11:05:20.497 回答
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
不包含任何状态的情况下消除开销。
于 2013-10-06T11:32:23.027 回答