我有一个看起来像这样的课程
#ifndef UNTITLED_FIXEDVECTOR_H
#define UNTITLED_FIXEDVECTOR_H
template<typename T, unsigned length>
class FixedVector {
public:
FixedVector();
private:
T data[];
};
#endif //UNTITLED_FIXEDVECTOR_H
但我不能以任何方式从其构造函数访问length
:
#include "FixedVector.h"
FixedVector::FixedVector() {
T[] data = new T[length]; //**NO LENGTH HERE!!!**
}
如何从构造函数中访问非类型模板参数,以便我可以分配数据?
答案 0 :(得分:3)
您可以在头文件中实现构造函数的主体:
template<typename T, unsigned length>
class FixedVector {
public:
FixedVector()
{
data = new T[length];
}
private:
T* data;
};
更好的是,如果在编译时已知长度,则使用std::array
而不是动态分配,否则使用std::vector
。
答案 1 :(得分:3)
您需要重新指定模板参数
template <typename T, unsigned length>
FixedVector<T,length>::FixedVector() {
data = new T[length];
}