使用QGenericMatrix作为另一个类的属性

时间:2018-05-16 15:38:42

标签: c++ qt

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>;
}

然而,语法可能非常不正确。我应该如何在头文件和构造函数中编写声明?

1 个答案:

答案 0 :(得分:2)

由于必须在编译时知道模板参数,因此有两种选择:

  1. 修复MyClass中的矩阵大小和类型。 e.g

    class MyClass {
      QGenericMatrix<2, 3, QColor> colorMatrix;
    }
    
  2. 将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;