template<class T>
void foo(T s)
{
unsigned T x = -1;
//...
}
{
int x = 129;
foo(x);
}
如何修改模板类型为无符号? 我知道这是不好的做法,因为并非所有东西都可以声明为未签名,但在特殊情况下这是有道理的。
我不想将修改后的类型作为模板参数传递。我想修改函数体本身的类型。
std::make_unsigned
来检索整数类型对应的无符号类型。
#include <type_traits>
static_assert(
std::is_same_v<
unsigned int,
std::make_unsigned_t<int>
>
);
请注意,如果模板参数
T
不是std::make_unsigned
接受的枚举有效类型之一,您的程序将是错误的/表现出未定义的行为。