【问题标题】:How to pass a custom comparator to a custom function C++如何将自定义比较器传递给自定义函数 C++
【发布时间】:2016-03-14 20:18:44
【问题描述】:

所以假设我有一系列像这样的自定义比较器:

template <typename T>
class less_class {
    bool operator() (T obj, T value) const {
        return obj < value;
    }
};

template <typename T>
class greater_than {
    bool operator() (T obj, T value) const {
        return obj > value;
    }
};

template <typename T>
class equal_to {
    bool operator() (T obj, T value) const {
        return obj == value;
    }
};

我有这样的功能:

template <typename T>
bool compare_values(T obj, T value, T comparator(T obj, T value)) {
    if comparator(obj, value) return true;
    return false;
}

我应该在 compare_values 函数中使用什么语法,以便它可以接收上述任一比较器并在其实现中使用它?目前,我对函数的比较器参数以与上述类似的方式编写,并且 Xcode 出现错误。我已经尝试稍微弄乱这些论点,看看是否有任何效果,但我认为我需要更好地理解我在这里想要做什么。任何帮助将不胜感激!

【问题讨论】:

  • 请注意您的课程已经是标准的:std::less, std::greater_than ecc。
  • 你的比较器应该是结构或类,public 作为修饰符。

标签: c++ comparator functor templating


【解决方案1】:

您只想将其作为模板:

template <typename T, typename F>
bool compare_values(T const& obj, T const& value, F comparator) {
    return comparator(obj, value);
}

bool equal = compare_values(1, 1, less_class<int>{});

虽然您所有的operator() 目前都是private,但这并不是特别有用。此外,您正在按值获取所有参数,您应该更喜欢通过引用 const 来获取它们以避免不必要的副本。


此外,这些已经以std::lessstd::greaterstd::equal_to 的形式存在。

【讨论】:

  • 您也可以通过前向引用传递FF&amp;&amp; comparator
猜你喜欢
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
相关资源
最近更新 更多