gpt4 book ai didi

c++ - 由于未签名,消除了模板化方法中的警告

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:07 25 4
gpt4 key购买 nike

我发现了一些模板化代码,它们有时会执行以下检查:

template<class IntegralType>
void randomFunction(IntegralType t)
{
...
if (t < 0)
...
}

代码的思想是t是一个整数类型(有符号或无符号)。无论是否有符号,代码都可以正常工作,但编译器会发出警告,因为在 unsigned 整数的情况下,检查将始终为真。

在 C++03 中是否有一种方法可以修改代码以消除警告而不抑制它?我正在考虑以某种方式检查 T 的签名,不知道是否可行。

我知道 C++11 的 is_signed 但我不确定它如何在 C++03 中实现。

最佳答案

使用标签调度和特征:

template <typename T>
bool is_negative(T t, std::true_type)
{
return t < 0;
}
template <typename T>
bool is_negative(T t, std::false_type)
{
return false;
}

template<class IntegralType>
void randomFunction(IntegralType t)
{
...
if (is_negative(t, std::is_signed<IntegralType>::type())
...
}

std::is_signed 可以在 C++03 中实现。

关于c++ - 由于未签名,消除了模板化方法中的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47869720/

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