如您所知 std::max
和 std::min
“受苦”是因为他们有 1 个模板参数,所以即使是简单的 max(container.size(), 47)
将不起作用,因为 .size() 返回 size_t
47 是 int
.
我知道历史上有 proposal向 C++ 添加适当的重载,但被拒绝。
但据我所知,这主要是因为论文太复杂,增益不够,所以我想知道是否有人会使用 std::common_range_t
作为返回值(发明的类型特征,它为您提供足够大的 int/float 以容纳混合参数的最小值/最大值,否则为硬错误)会很好......
所以最后得到我的问题:
如果我们希望 min/max 扩展为采用上述 2 个模板参数,是否有任何向后兼容性或任何其他问题阻止了这一点?
笔记:
最佳答案
二元论std::min/max
返回对最小值/最大值参数的引用。这要求它们的类型相同,因为您不能让函数返回不同的类型。您也不能返回对临时对象的引用。
做到这一点的唯一方法是创建一个新函数,该函数返回一个值(可能是 std::common_type
类型),即最小值/最大值的拷贝。但由于它返回的是拷贝而不是引用,因此它不会向后兼容 std::min/max
.
关于c++ - C++ 概念可以用于在 C++ 中实现混合类型 min 和 max 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67693865/