如何使用std :: less专门化对象进行迭代和使用

时间:2017-04-27 03:14:05

标签: c++ templates functor

这是来自测试。 任务:创建一个与std :: less完全相同的泛型函数对象,但总是返回true。 和给定的解决方案:

template<class T>
struct myless : less<T> {
    bool operator(T, T) const { return true; }
};

如何实例化和使用它?

2 个答案:

答案 0 :(得分:1)

去另一所学校。提供的解决方案包含2条正确的行。它们是template<class T>};;我在代码审查中拒绝的所有其他内容。

template<class T>
struct myless {
  bool operator(T const&, T const&) const { return true; }
}; 

这至少是正确的一半。对于C ++ 14,您还需要

template<>
struct myless<void> {
  using is_transparent=void;
  template<class T, class U>
  bool operator(T const&, U const&) const { return true; }
}; 

在std库中使用它很难,因为它们都需要myless不满足的公理。

您可以通过my_less<int>()创建它。然后,您通过另一个 int套来传递该对象两个()

答案 1 :(得分:0)

你可以在std :: sort中使用它:

template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);

template <class RandomAccessIterator, class Compare>
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);