在构造函数中访问非类型模板参数

时间:2017-07-06 15:20:39

标签: c++

我有一个看起来像这样的课程

#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!!!**
}

如何从构造函数中访问非类型模板参数,以便我可以分配数据?

2 个答案:

答案 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];
}