对整型常量表达式强制执行编译时最大值

Qua*_*ees 4 c++ templates class-template c++17 compile-time-type-checking

我有一个像这样的模板类:

template<typename T, unsigned int size>
class Array 
{
public:
  static const unsigned int SIZE = size;
  // ...
private:
  T data[SIZE];
};
Run Code Online (Sandbox Code Playgroud)

有没有办法添加编译时检查,使 an 的大小Array<T,XXXX>永远不会超过某个值?

就像如果该值为512,则不应编译:

Array<int, 1000> arr;


C++ 化我的代码的想法对我来说是新的,所以我愿意接受任何指南或在线进一步学习来帮助解决这个问题,因为我什至不知道要谷歌搜索什么。我尝试过的一切似乎都还很遥远。

JeJ*_*eJo 7

有没有办法添加编译时检查,使 an 的大小Array<T,XXXX>永远不会超过某个值?

您可以requires在 C++20 中使用它

template<typename T, unsigned int size> requires (size < 512)
class Array 
{
       // .....
};
Run Code Online (Sandbox Code Playgroud)

或者,您可以static_assert在类定义中的条件中向用户发送有意义的消息。

template<typename T, unsigned int size>
class Array 
{
     static_assert(size < 512, "Array size exceeded");
     // ....
};
Run Code Online (Sandbox Code Playgroud)