如何将未知大小的矩阵存储为类中的成员? 最近我一直在自学C++,想在一个新项目上尝试一下。我决定建立一个非常简单的机器学习库,使用Eigen来存储和操作数据。我希望有一个数据类,它存储一个特征矩阵,并且可以对所述矩阵执行洗牌和分区操作

如何将未知大小的矩阵存储为类中的成员? 最近我一直在自学C++,想在一个新项目上尝试一下。我决定建立一个非常简单的机器学习库,使用Eigen来存储和操作数据。我希望有一个数据类,它存储一个特征矩阵,并且可以对所述矩阵执行洗牌和分区操作,c++,templates,eigen,C++,Templates,Eigen,我的问题在于确定成员矩阵的类型。理想情况下,我可以使用已经创建的特征矩阵调用构造函数,并让成员矩阵采用该类型 如果我想初始化成员矩阵的类型,我应该创建什么类型的成员矩阵 基于传递给构造函数的矩阵类型?有没有一种方法可以在不指定任何类型的模板参数的情况下执行此操作 template <class T1, class T2, class T3> class Data{ private: Eigen::MatrixBase<T1,T2,T3> X;

我的问题在于确定成员矩阵的类型。理想情况下,我可以使用已经创建的特征矩阵调用构造函数,并让成员矩阵采用该类型

如果我想初始化成员矩阵的类型,我应该创建什么类型的成员矩阵 基于传递给构造函数的矩阵类型?有没有一种方法可以在不指定任何类型的模板参数的情况下执行此操作

  template <class T1, class T2, class T3>
class Data{
    private:
        Eigen::MatrixBase<T1,T2,T3> X; 
    public:
        Data(Eigen::Matrix<T1,T2,T3> feature_matrix ): X{feature_matrix};
};


 int main()
  {
    Eigen::Matrix<int,2,2> m;
    m<<1,2,3,4 ;

    Data d(m);  //doesn't work because Data is missing template args

   return 0;
  }
模板
类数据{
私人:
本征::矩阵基X;
公众:
数据(特征::矩阵特征\矩阵):X{特征\矩阵};
};
int main()
{
特征矩阵m;

m如果
Eigen::Matrix
模板参数有typedef,则可以简化为单个模板参数。例如,假设
Eigen::Matrix
具有以下声明:

namespace Eigen
{
    template<class cell_type, int rows, int columns>
    class Matrix
    {
    public:
        typedef cell_type CellType;
        static const int Rows = rows;
        static const int Columns = columns;

        //Other stuff
    }
}
并像这样实例化:

typedef Eigen::Matrix<int,2,2> mat_type;
mat_type m;
m<<1,2,3,4 ;

Data<mat_type> d(m);
typedef特征::矩阵矩阵矩阵类型;
mat_型m;
M
如果我希望根据传递到构造函数中的矩阵类型初始化成员矩阵,那么我应该创建什么类型的成员矩阵?有没有一种方法可以在不指定任何类型的模板参数的情况下进行初始化

  template <class T1, class T2, class T3>
class Data{
    private:
        Eigen::MatrixBase<T1,T2,T3> X; 
    public:
        Data(Eigen::Matrix<T1,T2,T3> feature_matrix ): X{feature_matrix};
};


 int main()
  {
    Eigen::Matrix<int,2,2> m;
    m<<1,2,3,4 ;

    Data d(m);  //doesn't work because Data is missing template args

   return 0;
  }
直接…我不知道怎么做

但是如果您接受使用模板“make”函数

附言:我假设您的
数据
作为模板参数接收一个类型和两个int;而不是三个类型。

请考虑查看
template <typename T, int I1, int I2>
Data<T, I1, I2> makeData (Eigen::Matrix<T, I1, I2> em)
 { return em; }
auto d = makeData(m);