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

时间:2015-07-24 17:49:48

标签: c++ templates c++03

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

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

我想强制T始终为unsigned,例如uint8_t, uint16_t, unsigned int, ...,如果给定的类型为signed,则会失败。这可以用C ++做吗?如果是这样,有人可以说明如何吗?

谢谢

1 个答案:

答案 0 :(得分:2)

这在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");
    // ...
};