1

我有很多类型可以使用比较函子,我想看看是否有办法在不传递参数的情况下简化它。这是一个虚拟代码示例:

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 是如何工作的,或者有什么办法吗?

4

1 回答 1

1

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更改为模板函数。由于默认参数的存在,您可以选择不指定模板参数,但在这种情况下将使用 of。operator()std::less<void>operator()std::less<void>

于 2021-11-16T02:44:07.907 回答