将无符号类型强制转换为 C++ 模板类型名
Force unsigned type into C++ template typename
我是 C++ 和 template
的新手。我在 C++03 中有一个模板 class,我想强制给定类型始终是无符号的。例如:
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");
// ...
};
我是 C++ 和 template
的新手。我在 C++03 中有一个模板 class,我想强制给定类型始终是无符号的。例如:
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");
// ...
};