假设我有以下模板
template<unsigned char I, unsigned char F>
class FOO
{
....
}
Run Code Online (Sandbox Code Playgroud)
事实上,我要求(I> = F).如果有人误用了
FOO<1, 2> a;
Run Code Online (Sandbox Code Playgroud)
我希望提出编译错误.怎么做?
谢谢
一种方法可能是C++ 11 static_assert,它类似于a assert,但在编译时检查:
template<unsigned char I, unsigned char F>
class FOO
{
static_assert(I >= F, "I needs to be larger or equal to F");
...
};
Run Code Online (Sandbox Code Playgroud)
如果你没有C++ 11,那么好的旧数组边界技巧也适用于此.只需将以下内容放在班级的私人部分:
static int const error_size = I >= F ? 1 : -1;
typedef char ERROR_I_must_not_be_less_than_F[error_size];
Run Code Online (Sandbox Code Playgroud)
只要I小于,就会触发"负数组大小"错误F.