gpt4 book ai didi

c++ - 使用 numeric_limits 作为默认参数值

转载 作者:行者123 更新时间:2023-12-02 02:47:23 27 4
gpt4 key购买 nike

我有一个包含范围参数的模板统计类。

template <typename T>
class limitStats
{
public:
limitStats(T mx, T min) :
max(mx),
min(mn),
range(mx-mn)
{;}

private:
const T max;
const T min;
const T range;
}

我想设置最大和最小允许值的默认值,但浮点和整数类型的最小值不同。

一般情况下我可以写

T min_val = numeric_limits<T>::isinteger ? numeric_limits<T>::min() : -numeric_limits<T>::max();

我发现我不能将它用作默认参数

limitStats(T mx = std::numeric_limts<T>::max(), 
T mn = numeric_limits<T>::isinteger ? numeric_limits<T>::min() : -numeric_limits<T>::max())

有没有办法实现这样的目标?

最佳答案

您可能需要重新考虑您的设计。你想用你的 limitStats 做什么?那std::numeric_limits不提供?

不要复制 std::numeric_limits 的设计缺陷。例如,std::numeric_limits<double>::min()名字非常错误。最小 double 是最大 double 的加法逆元。 std::numeric_limits是对符号和模板的滥用。我认为,当然。

您对 min 的想法格式不正确。考虑一下您对 limitStats<unsigned int> 的默认设置.

使用默认值,您的 range对于有符号整数无效。对于无符号整数,它复制 max ,假设您使用 limitStats<unsigned int>::min 解决了问题。对于浮点类型,它要么无效,要么重复 max ,取决于您所说的 limitStats<floating_point_type>::min 的意思.

允许默认值是否有意义?如果您只是不提供默认值并将默认构造函数设为私有(private)/未实现,您甚至不会有这个问题。

关于c++ - 使用 numeric_limits 作为默认参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6775587/

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