我正在编写一个在size_t上参数化的类模板,
template<size_t k>
class MyClass {...}
Run Code Online (Sandbox Code Playgroud)
参数k应该真的小于10,在这种情况下,如果它超出了这个范围,我希望它不能编译.我怎么能在C++ 11及更高版本中做到这一点?
MyClass<1> instance1; // ok
MyClass<2> instance2; // ok
MyClass<100> instance100; // fail to compile
Run Code Online (Sandbox Code Playgroud)
cpl*_*rat 11
使用 static_assert
template<size_t k>
class MyClass {
static_assert(k < 10, "Illegal k");
};
int main() {
MyClass<50> t; //< Compile time failure
}
Run Code Online (Sandbox Code Playgroud)
您可以在模板参数中添加一个检查
template<size_t k, std::enable_if_t<k <= 10, bool> = true>
class MyClass {};
Run Code Online (Sandbox Code Playgroud)
这将允许MyClass<1> instance1;但MyClass<100> instance100;无法编译.
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |