gpt4 book ai didi

c++ - 我可以使用折叠表达式实现 max(A, max(B, max(C, D))) 吗?

转载 作者:IT老高 更新时间:2023-10-28 12:58:45 28 4
gpt4 key购买 nike

在尝试使用 C++17 折叠表达式时,我尝试实现 max sizeof ,其中结果是类型 sizeof 的最大值。我有一个使用变量和 lambda 的丑陋折叠版本,但我想不出一种使用折叠表达式和 std::max() 来获得相同结果的方法。

这是我的折叠版本:

template<typename... T>
constexpr size_t max_sizeof(){
size_t max=0;
auto update_max = [&max](const size_t& size) {if (max<size) max=size; };
(update_max(sizeof (T)), ...);
return max;
}


static_assert(max_sizeof<int, char, double, short>() == 8);
static_assert(max_sizeof<char, float>() == sizeof(float));
static_assert(max_sizeof<int, char>() == 4);

我想使用折叠表达式和 std::max() 编写等效函数。例如对于 3 个元素,它应该扩展为

return std::max(sizeof (A), std::max(sizeof(B), sizeof (C)));

有可能吗?

最佳答案

由于还没有人发布这个作为答案,最简单的方法就是使用 std::max() 的重载。这是为这个问题准备好的:接受 initializer_list 的那个:

template<typename... T>
constexpr size_t max_sizeof() {
return std::max({sizeof(T)...});
}

关于c++ - 我可以使用折叠表达式实现 max(A, max(B, max(C, D))) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46404503/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com