繁体   English   中英

强制将无符号类型转换为C ++模板类型名称

[英]Force unsigned type into C++ template typename

我是C ++和template新手。 我在C ++ 03中有一个模板类,我想强制给定类型始终是无符号的。 例如:

template <typename T>
class Test
{
    T _var1;
};

我想迫使T能始终unsigneduint8_t, uint16_t, unsigned int, ...如果给定类型无法signed 这可以在C ++中完成吗? 如果可以,那么有人可以展示如何?

谢谢

在C ++ 03中这很棘手(但在C ++ 11中很容易)。 Boost提供了一种清晰易用的方式:

#include <limits>
#include <boost/static_assert.hpp>

template <typename T>
class Test
{
    BOOST_STATIC_ASSERT_MSG(std::numeric_limits<T>::is_integer &&
                            !std::numeric_limits<T>::is_signed,
                            "T must be an unsigned integer type");
    // ...
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM