如何将自定义比较器传递给自定义函数 C++
How to pass a custom comparator to a custom function C++
所以假设我有一系列像这样的自定义比较器:
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
, and std::equal_to
。
所以假设我有一系列像这样的自定义比较器:
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
, and std::equal_to
。