gpt4 book ai didi

c++ - 有没有更优雅的方法来使用带有独立 if() 的 else 语句

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:06 25 4
gpt4 key购买 nike

我目前正在使用适用于 C++ 的 SFML 并尝试调整窗口大小,但是我发现我的问题的解决方案感觉不太正确,我正在寻找是否有更好的方法。

我有一个对象,它会多次调整大小,因此它可能适合或不适合窗口,如果窗口较大,我必须扩大窗口,如果窗口较小,则缩小它。但是,我有窗口的最小尺寸,如果对象适合我想将窗口重置为该尺寸。

这是我现在使用的伪代码:

if (Object.getSize().x > window.getSize().x || Object.getSize().y > window.getSize.y){
if(Object.getSize().x > windowMinSize.x){
window.resize(Object.getSize().x, window.getSize().y)
}
if(Object.getSize().y > windowMinSize.y){
window.resize(window.getSize().x, Object.getSize().y)
}
}
else{
window.resize(windowMinSize);
}

我查看了 switch 和其他选项,但没有找到我要找的东西。

最佳答案

我有点困惑,因为最后听起来您想简单地将窗口大小调整为对象大小,同时保持特定的最小大小。

因此,您只需要简单地调用 std::max() 来确定两个输入中较大的值:

unsigned int width = std::max(min_width, object_width);
unsigned int height = std::max(min_height, object_height);

当使用新尺寸时,它基本上会调整窗口大小以匹配您的对象,除非该对象小于您的最小尺寸。

您可以使用相同的模式,通过使用 std::min() 作为附加层来添加最大尺寸:

unsigned int width = std::min(max_width, std::max(min_width, object_width));
unsigned int height = std::min(max_height, std::max(min_height, object_height));

编辑:正如 bolov 正确建议的那样,对于使用新的 std::clamp 的现代编译器,这可以进一步简化:

unsigned int width = std::clamp(object_width, min_width, max_width);
unsigned int height = std::clamp(object_height, min_height, max_height);

关于c++ - 有没有更优雅的方法来使用带有独立 if() 的 else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50320078/

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