[英]Force unsigned type into C++ template typename
我是C ++和template
新手。 我在C ++ 03中有一个模板类,我想强制给定类型始终是无符号的。 例如:
template <typename T>
class Test
{
T _var1;
};
我想迫使T
能始终unsigned
如uint8_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.