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

use*_*356 1 c++ templating functor comparator

假设我有一系列自定义比较器,如下所示:

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;
    }
};
Run Code Online (Sandbox Code Playgroud)

我有这样的功能:

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

我应该在compare_values函数中使用什么语法,以便它可以接受上述比较器中的任何一个并在其实现中使用它?目前,我的函数的比较器参数是以与上面类似的方式编写的,而Xcode正在抛出错误.我曾经尝试过搞乱这些争论,看看是否有什么可行,但我想我需要更好地理解我在这里要做的事情.任何帮助,将不胜感激!

Bar*_*rry 7

你想把它当作模板:

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>{});
Run Code Online (Sandbox Code Playgroud)

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


此外,这些已经存在的std::less,std::greaterstd::equal_to.