构造具有各种类型的数组

时间:2013-05-27 20:56:17

标签: c++ arrays eigen

我正在编写一个神经网络类Eigen作为我的线性代数后端,我想知道如何创建一个数组,其中每个元素具有不同的类型,在运行时确定。

我找到了this,但它对我不起作用。

我想要的是能够使用类似数组的访问方法访问不同大小的矩阵,即vMatrix [i]。

编辑:

基类的原型:

template<typename T, unsigned _Rows, unsigned _Cols> Eigen::Matrix;

我正在尝试做什么:

vector< DerivedMatrix > vMatrix;
vMatrix.push_back(some_5x4_matrix);
vMatrix.push_back(some_4x10_matrix);
vMatrix.push_back(some_10x1_matrix);

之前未定义矩阵大小。

因为我比C ++更了解C,所以我想到了一种方法来解决这个问题:使用带有void *的struct和一些用于存储项类型或行和放大器的机制。山坳;但是,因为我正在学习C ++,所以我想避免这种情况。

2 个答案:

答案 0 :(得分:0)

如果您希望支持预先确定的有限类型,则可以使用Boost Variant

您还可以使用Boost Any作为数组/向量的元素类型。

答案 1 :(得分:0)

以下代码段如何?就动态大小而言,您可以使用.resize()函数随时调整矩阵的大小。这有帮助吗?

#include<iostream>
#include<vector>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;

int main(int argc,char **argv){
    vector<MatrixXf> A;
    MatrixXf P = MatrixXf::Random(2,3);
    MatrixXf Q = MatrixXf::Random(4,5);
    MatrixXf R = MatrixXf::Random(3,4);
    A.push_back(P);
    A.push_back(Q);
    A.push_back(R);
    cout<<A[0]<<endl<<A[1]<<endl<<A[2]<<endl;
    return 0;
}