如何针对特定类型约束设置static_assert
?
目前,我想仅为unsigned int
类型创建模板,而不是signed int
类型。或者,仅适用于整数类型或特定类型名称。 static_assert(sizeof(int))
仅提供基于大小的断言,我不知道如何执行任何额外检查。
我在Xcode 4.6.2中使用了Clang及其libc++
。这是命令行上的当前编译器信息。
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.3.0
Thread model: posix
答案 0 :(得分:5)
这不是static_assert
的真正含义,但你可以这样做:
template<typename T>
struct Type
{
static_assert(std::is_same<T, unsigned int>::value, "bad T");
};
或者,如果您只想让T
成为某种无符号整数类型(不是特定unsigned int
):
template<typename T>
struct Type
{
static_assert(std::is_unsigned<T>::value, "bad T");
};
答案 1 :(得分:1)
这是一个脚手架:
#include <type_traits>
template<typename TNum>
struct WrapNumber
{
static_assert(std::is_unsigned<TNum>::value, "Requires unsigned type");
TNum num;
};
WrapNumber<unsigned int> wui;
WrapNumber<int> wi;
答案 2 :(得分:1)
要检查所有整数类型,可以使用以下内容:
#include <type_traits>
// [...]
static_assert(std::is_integral<T>::value, "The type T must be an integral type.");
// [...]