声明一个“无符号 T”。

8

我想在模板中使用无符号T:

template<class T>
void signed2unsigned(const T* source, unsigned T* dest, size_t n)
    {
    do
        {
        intmax_t s=*source;
        s+=min(*source);

        *dest=s;

        ++dest;
        ++source;
        --n;
        }
    while(n!=0);
    }

这样不起作用,因为在考虑类型T之前,无符号without被扩展为无符号int。除了引入U并编写文档以说明U必须是无符号T之外,还有其他解决方法吗?

3
std::make_unsigned怎么样? - Some programmer dude
2个回答

11

std::make_unsigned<T>::type 是您正在寻找的内容。


2

you can use std::make_unsigned<T>::type


除了g++ (tdm64-1) 4.7.1在<type_traits>中找不到它之外,template<class T> void signed2unsigned(const T* source, std::make_unsigned<T>::type* dest, size_t n)而且我已经使用了-std=c++11会出现'std::make_unsigned<T>::type' 不是一种类型 - user877329
使用typedef std::make_unsigned<T>::type T_type。 - 4pie0
尽管它可以编译,但实际上它破坏了使用模板的想法,因为我无法将typedef作为模板。 - user877329
@user877329 你想将 dest 限制为类似于无符号类型的 (uint8_t, uint16_t, uint32_t, uint64_t) 吗? - Red XIII
我认为这是一个新问题的话题。 - 4pie0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接