c++ - 如何将自定义比较器传递给自定义函数 C++

标签 c++ comparator functor templating

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

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 正在抛出错误。我试过稍微弄乱这些论点,看看是否有任何效果,但我认为我需要更好地理解我在这里想做什么。任何帮助将不胜感激!

最佳答案

您只想将其作为模板:

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::less , std::greater , 和 std::equal_to .

关于c++ - 如何将自定义比较器传递给自定义函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35997261/

相关文章:

c++ - QTableView 滚动到新添加的行

c++ - 为什么 decimal128 可能会被标准化而 quad precision 不会?

java - 带有 Comparator<?> 参数的 TreeSet 构造函数

java - 为什么使用基类作为方法引用会导致编译器错误

c++ - std::map 非常量仿函数,clang++ 下编译时错误,g++ 正常

c++ - 存储和传递 std::function - 按值还是按引用?

c++ - 在 C++17 中,为什么类模板与函数模板的指针类型推导明显不一致?

c++ - 遍历所有可能的组合

java - 如何编写 Comparator.comparing

c++ - 使用仿函数子类化窗口 (Win32)