Qt有一个名为QGenericMatrix
的班级。它的定义如下:
template <int N, int M, typename T>
class QGenericMatrix
{...}
我想在我自己的colorMatrix
类中使用它作为属性MyClass
,然后在其构造函数中初始化它,如下所示:
MyClass::MyClass(int n, int m)
{
colorMatrix = new QGenericMatrix<n, m, QColor>;
}
然而,语法可能非常不正确。我应该如何在头文件和构造函数中编写声明?
答案 0 :(得分:2)
由于必须在编译时知道模板参数,因此有两种选择:
修复MyClass中的矩阵大小和类型。 e.g
class MyClass {
QGenericMatrix<2, 3, QColor> colorMatrix;
}
将MyClass定义为一个模板,该模板采用与QGenericMatrix相同的模板参数,并使用MyClass实例化colorMatrix&#39;模板参数。像这样:
template<int N, int M, typename T>
class MyClass {
MyClass() { // init }
T entry(int i, int j);
QGenericMatrix<N, M, T> colorMatrix;
}
template<int N, int M, typename T>
T MyClass::entry(int i, int j) { return colorMatrix(i, j); }
当然,在这种情况下,MyClass必须使用模板参数进行实例化,模板参数必须在编译时才能知道。
MyClass<2, 3, QColor> myClass;