相关疑难解决方法(0)

由于范围有限,比较总是假的...有模板

我有一个模板化函数,它对模板类型变量进行操作,如果该值小于0,则将其设置为0.这样可以正常工作,但是当我的模板化类型未签名时,我会收到有关如何比较总是的警告假.这显然是有道理的,但由于它是模板化的,我希望它对所有数据类型(有符号和无符号)都是通用的,而不是发出警告.

我在Linux上使用g ++,并且我猜测有一种方法可以通过g ++的命令行选项来抑制该特定警告,但我仍然希望在其他非模板化的情况下得到警告.我想知道在代码中是否有某种方法可以防止这种情况,而无需编写多个版本的函数?

template < class T >
T trim(T &val)
{
  if (val < 0)
  {
    val = 0;
  }
  return (val);
}
int main()
{
  char cval = 5;
  unsigned char ucval = 5;

  cout << "Untrimmed: " << (int)cval;
  cval = trim(cval);
  cout << " Trimmed: " << (int)cval << endl;

  cout << "Untrimmed: " << (int)ucval;
  cval = trim(ucval);
  cout << " Trimmed: " << (int)ucval << endl;

 return (0);
}
Run Code Online (Sandbox Code Playgroud)

c++ templates warnings

6
推荐指数
2
解决办法
1305
查看次数

由于无符号,在模板化方法中删除警告

我找到了一些模板化的代码,在某些时候执行以下检查:

template<class IntegralType>
void randomFunction(IntegralType t)
{
    ...
    if (t < 0)
    ...
}
Run Code Online (Sandbox Code Playgroud)

代码的概念t是整数类型(有符号或无符号).无论签名如何,代码都可以正常工作,但编译器会发出警告,因为在unsigned整数的情况下,检查将始终为true.

在C++ 03中有没有办法修改代码以摆脱警告而不抑制它?我正在考虑T以某种方式检查签名,不知道它是否可能.

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

c++ templates compiler-warnings c++03

4
推荐指数
1
解决办法
136
查看次数

标签 统计

c++ ×2

templates ×2

c++03 ×1

compiler-warnings ×1

warnings ×1