2

如何创建一个类,该类采用比较器模板 likestd::less<T>std::equal_to<T>likestd::multisetstd::set执行?

4

3 回答 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 回答