模板 - 将ifstream输入作为模板值传递

时间:2018-01-29 14:52:40

标签: c++ templates

我有以下模板类:

#ifndef T_SIMPLE_MATRIX_H
#define T_SIMPLE_MATRIX_H


template<class T, int N>
class SMatrix {
  private:

    T v[N*N];

  public:

    SMatrix<T, N>(){}

    T& operator() (int r, int c){
        return  v[N*r+c];
    }
    const T& operator()(int r, int c) const{
        return  v[N*r+c];
    }



};

#endif // 

以下主要代码:

    ifstream fi(argv[1]);

    int N;
    fi >> N;

    for (int i = 0; i < N; i++) {
        int M;
        fi>>M;
        cout << "Matrix size " << M << endl;
        SMatrix<double, M> A;
    }

此代码在main.cpp中失败并给出错误:“类型为'int'的非类型模板参数不是整数常量表达式”。当我将M更改为2时,它可以用来将ifstream值传递给模板吗?

1 个答案:

答案 0 :(得分:-1)

必须在编译时中知道模板参数,例如

SMatrix<int, 10> A;

M的值在运行时中已知,因此不能用作模板参数。

你应该使N构造函数的参数并使用动态分配:

std::unique_ptr<T[]> v;
v.reset(new T[N * N]);