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

Templates - Passing ifstream input as template value

本文关键字:值传 ifstream 输入 模板      更新时间:2023-10-16

我有以下模板类:

#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 值传递给模板?

模板

参数必须在编译时知道,例如。

SMatrix<int, 10> A;

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

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

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