将无符号类型强制转换为 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");
    // ...
};