有没有一种方法可以构造一个模板类,它既可以用作编译数组又可以用作运行时数组(很像 C89 恒定大小数组和相同的 C99 可变长度数组),它允许逻辑语义(可变长度的一个模板参数)数组,两个固定长度,很像 std::array
).
最重要的是,我想防止这两种情况之间的代码重复,因为这两种情况之间的大多数功能是相同的。有没有办法使用 constexpr
或 enable_if
来实现这一点?
最佳答案
Eigen linear algebra library只用 C++03 做了这件事。它们的矩阵具有带有特殊值 (Eigen::Dynamic
) 的编译时大小,指示应该在运行时选择大小。通过模板特化实现存储。
例子:
template <typename Type,int N>
class Array {
Type data[N];
};
template <typename Type>
class Array<Type,Dynamic> {
boost::scoped_array<Type> data;
};
关于c++ - 编译时和运行时数组的一个模板类(名称),代码重复很少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742278/