模板 - 将 ifstream 输入作为模板值传递
Templates - Passing ifstream input as template value
我有以下模板类:
#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]);
相关文章:
- 为什么可以将左值传递给"std::async",即使它引用了右值
- 当值传递给C++中的运算符重载函数时会发生什么
- 按值返回 ifstream 将编译
- 如何将非可变参数值传递给 fmt::format?
- 将 qml 项目值传递给 cpp 后如何与它们进行交互?
- NDK:将文本字段值传递给 c++ 字符串
- 如何将值传递给 lambda 函数
- 如何在C++中将std::string值传递给RegSetValueEx()
- 如何将 c ++ 变量的值传递给 hadoop HDFS 的 bash 系统命令?
- C++ 通过参数将值传递给 char 数组
- 如何将值传递给MFC消息映射函数on_command
- 使用JNI将长值传递给Java
- 如何在不使用 Argv 和 Argc 的情况下将 Sum 值传递给 C++ 程序
- C++ 将值传递给 fStream
- 如何将函数中的多个值传递给C++中的不同函数
- 将多个解析值传递给 addPositionalArgument 函数
- C++为什么将左值传递给move构造函数对模板有效
- 一种自动检测对象的方法,该方法通过值传递给c++中的函数
- 将值传递给main(int,char**)
- 将大于long类型的最大值的值传递给C中的fseek