c++ - C++ 概念可以用于在 C++ 中实现混合类型 min 和 max 吗?

标签 c++ c++20 c++-concepts

如您所知 std::maxstd::min “受苦”是因为他们有 1 个模板参数,所以即使是简单的 max(container.size(), 47)将不起作用,因为 .size() 返回 size_t 47 是 int .
我知道历史上有 proposal向 C++ 添加适当的重载,但被拒绝。
但据我所知,这主要是因为论文太复杂,增益不够,所以我想知道是否有人会使用 std::common_range_t作为返回值(发明的类型特征,它为您提供足够大的 int/float 以容纳混合参数的最小值/最大值,否则为硬错误)会很好......
所以最后得到我的问题:
如果我们希望 min/max 扩展为采用上述 2 个模板参数,是否有任何向后兼容性或任何其他问题阻止了这一点?
笔记:

  • 这主要是技术上可行的问题,我是 不是 很感兴趣 WG21 是否计划做任何事情来对此进行标准化,主要是对潜在的技术限制感到好奇。
  • C++17 version of this question (出于某种原因严重低估😕),但更一般的是,还处理一些其他限制。
  • 最佳答案

    二元论std::min/max返回对最小值/最大值参数的引用。这要求它们的类型相同,因为您不能让函数返回不同的类型。您也不能返回对临时对象的引用。
    做到这一点的唯一方法是创建一个新函数,该函数返回一个值(可能是 std::common_type 类型),即最小值/最大值的拷贝。但由于它返回的是拷贝而不是引用,因此它不会向后兼容 std::min/max .

    关于c++ - C++ 概念可以用于在 C++ 中实现混合类型 min 和 max 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67693865/

    相关文章:

    c++ - 可变函数重载和 SFINAE - 解决歧义以模拟 "hide by signature"

    c++ - 是否可以使用 `requires` 子句启用/禁用纯虚函数?

    作为接口(interface)的 C++20 概念

    C++ 概念循环

    c++ - LevelDB:比较器、block_cache 和 filter_policy 的生命周期和职责?

    c++ - 通过索引访问可变参数模板中的类型

    c++ - 在 C++17 或更新版本中在哪里初始化静态常量成员?

    c# - 使用 C++ Baclground-Task 将解决方案部署到物理 WP8.1 设备

    c++ - While 循环在调用 print 函数后继续从 stringstream 获取用户输入

    c++ - 通过删除重复项生成新的 integer_sequence