Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将QGenericMatrix用作另一个类的属性_C++_Qt - Fatal编程技术网

C++ 将QGenericMatrix用作另一个类的属性

C++ 将QGenericMatrix用作另一个类的属性,c++,qt,C++,Qt,Qt有一个名为QGenericMatrix的类。它的定义如下: template <int N, int M, typename T> class QGenericMatrix {...} 但是,语法可能非常不正确。如何在头文件和构造函数中写入声明?由于必须在编译时知道模板参数,因此有两个选项: 修复MyClass中的矩阵大小和类型。e、 g class MyClass { QGenericMatrix<2, 3, QColor> colorMatrix; } c

Qt有一个名为
QGenericMatrix
的类。它的定义如下:

template <int N, int M, typename T>
class QGenericMatrix
{...}

但是,语法可能非常不正确。如何在头文件和构造函数中写入声明?

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

  • 修复MyClass中的矩阵大小和类型。e、 g

    class MyClass {
      QGenericMatrix<2, 3, QColor> colorMatrix;
    }
    
    class-MyClass{
    QGenericMatrix颜色矩阵;
    }
    
  • 将MyClass定义为使用与QGenericMatrix相同的模板参数的模板,并使用MyClass的模板参数实例化colorMatrix。像这样:

    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(){//init}
    T输入(int i,int j);
    QGenericMatrix颜色矩阵;
    }
    模板
    T MyClass::entry(inti,intj){返回颜色矩阵(i,j);}
    
    当然,在这种情况下,MyClass必须使用模板参数进行实例化,而模板参数在编译时也必须是已知的

    MyClass<2, 3, QColor> myClass;
    
    MyClass-MyClass;
    

  • 由于模板参数必须在编译时已知,因此有两个选项:

  • 修复MyClass中的矩阵大小和类型。e、 g

    class MyClass {
      QGenericMatrix<2, 3, QColor> colorMatrix;
    }
    
    class-MyClass{
    QGenericMatrix颜色矩阵;
    }
    
  • 将MyClass定义为使用与QGenericMatrix相同的模板参数的模板,并使用MyClass的模板参数实例化colorMatrix。像这样:

    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(){//init}
    T输入(int i,int j);
    QGenericMatrix颜色矩阵;
    }
    模板
    T MyClass::entry(inti,intj){返回颜色矩阵(i,j);}
    
    当然,在这种情况下,MyClass必须使用模板参数进行实例化,而模板参数在编译时也必须是已知的

    MyClass<2, 3, QColor> myClass;
    
    MyClass-MyClass;
    

  • 在编译时是否知道N、M和T?模板参数必须在编译时已知。例如,像
    intn
    这样的变量不能用于初始化模板。在编译时n、M和T是已知的吗?模板参数必须在编译时已知。像
    intn
    这样的变量不能用于初始化模板。对,选项2就是我想要的。但是,如何为此编写构造函数?我需要补充什么吗?那么
    getColorMatrix
    方法呢?我可以写
    QGenericMatrix MyClass::getColorMatrix(){return colorMatrix;}
    ?下面是一个工作示例:。除了类声明之外的函数声明必须在模板头之前,您可以用与前面相同的方式编写函数<在这种情况下,代码>模板。工作正常。非常感谢这些例子!对,选项2就是我想要的。但是,如何为此编写构造函数?我需要补充什么吗?那么
    getColorMatrix
    方法呢?我可以写
    QGenericMatrix MyClass::getColorMatrix(){return colorMatrix;}
    ?下面是一个工作示例:。除了类声明之外的函数声明必须在模板头之前,您可以用与前面相同的方式编写函数<在这种情况下,代码>模板。工作正常。非常感谢这些例子!