如何修改模板类型为unsigned?

问题描述 投票:0回答:1
template<class T>
void foo(T s)
{
    unsigned T x = -1;
    //...
}

{
   int x = 129;
   foo(x);
}

如何修改模板类型为无符号? 我知道这是不好的做法,因为并非所有东西都可以声明为未签名,但在特殊情况下这是有道理的。

我不想将修改后的类型作为模板参数传递。我想修改函数体本身的类型。

c++ templates casting type-conversion unsigned-integer
1个回答
1
投票

您可以使用

std::make_unsigned
来检索整数类型对应的无符号类型。

#include <type_traits>

static_assert(
    std::is_same_v<
        unsigned int, 
        std::make_unsigned_t<int>
    >
);

请注意,如果模板参数

T
不是
std::make_unsigned
接受的枚举有效类型之一,您的程序将是错误的/表现出未定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.