C++非类型模板参数编译时检查

标签 c++ templates parameters non-type

我有一个带有两个非类型模板参数的 C++ 类:

类型为 size_t 的维度和对象 vector 的常量引用。

template <size_t DIMENSION, const std::vector<Tuple>& BORDERS>
class Rule {
public:

  Rule(const std::vector<Tuple>& ranges, const Action& action) :
      ranges_(ranges),
      action_(action) {};

private:

  std::vector<Tuple> ranges_;
  Action action_;
};

是否有可能在编译时确保以下条件成立?

DIMENSION == BORDERS.size()

预先感谢您提出任何建议。

最佳答案

vector 是一个动态容器,因此它的大小取决于您在运行时如何使用它。不幸的是,这意味着您无法执行编译时检查来实现您想要的。

std::array 可能更适合这种情况,因为它的大小在编译时是固定的。

关于C++非类型模板参数编译时检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19837491/

相关文章:

c++ - 是否可以仅在需要时缩小范围?

c++ - 如何为模板函数指定可能的数据类型

斯卡拉 2.9 : plans for type inference of function parameters with default arguments?

c++ - 模板类转换错误

c++ - 允许在模板函数中对浮点类型进行位移的变通方法

google-app-engine - Paypal立即购买按钮是否包含一个参数来检查交易的成功/失败

php - 搜索另一个站点的搜索框

c++ - 在哪里可以在 Windows 上设置 make.exe 的路径?

c++ - 重载运算符 !=

确定三角形的C++程序