首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c++17 CTAD进行函数对象参数推导

使用c++17 CTAD进行函数对象参数推导
EN

Stack Overflow用户
提问于 2021-11-16 02:33:13
回答 1查看 64关注 0票数 1

我有很多类型可以使用比较函数器,我想看看是否有方法可以简化它而不传递参数。下面是一个虚拟代码示例:

代码语言:javascript
复制
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如何工作,或者有任何方法可以做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2021-11-16 02:44:08

您的Compare不必是模板类,只需将其operator()转换为模板函数,并创建一个constexpr对象以供比较使用。

代码语言:javascript
复制
struct Compare {
  template<typename T> 
  constexpr bool operator()(const T& a, const T& b) const {
    return true;
  }
}; 
constexpr inline Compare cmp;

然后,您可以像这样调用:

代码语言:javascript
复制
Base b1, b2;
cmp(b1, b2);

但是我想知道c++17 std::less是如何工作的

C++14将默认模板参数void添加到std::less中,并将部分特殊化函数的operator()修改为template std::less。由于默认参数的存在,您可以选择不指定模板参数,但在这种情况下将使用std::less<void>operator()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69983135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档