我是C ++和template
的新手。我在C ++ 03中有一个模板类,我想强制给定的类型始终是无符号的。例如:
template <typename T>
class Test
{
T _var1;
};
我想强制T
始终为unsigned
,例如uint8_t, uint16_t, unsigned int, ...
,如果给定的类型为signed
,则会失败。这可以用C ++做吗?如果是这样,有人可以说明如何吗?
谢谢
答案 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");
// ...
};