我有很多类型可以使用比较函数器,我想看看是否有方法可以简化它而不传递参数。下面是一个虚拟代码示例:
struct Base{};
template<typename T> struct Compare {
bool operator()(const T& a, const T& b) {
return true;
}
};
int main()
{
Base b1, b2;
Compare(b1, b2);
return 0;
}不幸的是,这不适用于https://godbolt.org/z/q56c3coaT。但是,我想知道c++17 std::less如何工作,或者有任何方法可以做到这一点?
发布于 2021-11-16 02:44:08
您的Compare不必是模板类,只需将其operator()转换为模板函数,并创建一个constexpr对象以供比较使用。
struct Compare {
template<typename T>
constexpr bool operator()(const T& a, const T& b) const {
return true;
}
};
constexpr inline Compare cmp;然后,您可以像这样调用:
Base b1, b2;
cmp(b1, b2);但是我想知道c++17 std::less是如何工作的
C++14将默认模板参数void添加到std::less中,并将部分特殊化函数的operator()修改为template std::less。由于默认参数的存在,您可以选择不指定模板参数,但在这种情况下将使用std::less<void>的operator()。
https://stackoverflow.com/questions/69983135
复制相似问题