C++ 构造具有各种类型的数组

C++ 构造具有各种类型的数组,c++,arrays,eigen,C++,Arrays,Eigen,我正在写一个以线性代数为后端的神经网络类,我想知道如何创建一个数组,其中每个元素都有不同的类型,在运行时确定 我找到了,但对我不起作用 我所希望的就是能够使用类似数组的访问方法访问不同大小的矩阵,即vMatrix[I] 编辑: 基类的原型: template<typename T, unsigned _Rows, unsigned _Cols> Eigen::Matrix; 模板特征::矩阵; 我想做的是: vector< DerivedMatrix > vMatri

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

我找到了,但对我不起作用

我所希望的就是能够使用类似数组的访问方法访问不同大小的矩阵,即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);
vectorvMatrix;
vMatrix.push_back(一些_5x4_矩阵);
vMatrix.push_back(一些_4x10_矩阵);
vMatrix.push_back(一些_10x1_矩阵);
矩阵的大小未事先定义


<> P>因为我知道C多于C++,所以我想一个解决办法:使用Value*结构和一些机制来存储条目类型或行和CL;但是,自从我学习C++,我想避免它。

< p>如果你有一个预先确定的有限类型的类型,你可以支持,你可以使用.< /p>
还可以用作数组/向量的元素类型。

下面的代码片段如何?就动态大小而言,可以使用.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;
}
#包括
#包括
#包括
使用名称空间特征;
使用名称空间std;
int main(int argc,字符**argv){
载体A;
MatrixXf P=MatrixXf::Random(2,3);
MatrixXf Q=MatrixXf::Random(4,5);
MatrixXf R=MatrixXf::Random(3,4);
A.推回(P);
A.推回(Q);
A.向后推(R);

你想存储在数组中的对象是否有一个公共基类?如果有,你可以使用多态性。我不确定Eigen是否支持非数字类型。你可以使用
boost::variant
boost::any
来实现这一点。如果你不能使用boost,请参阅答案以获取基本变量实现的示例。我确实有一个基类类别(矩阵),但它本身是多态的。除非完全定义了模板类,否则我无法继承模板类。联合在这里也不起作用,因为我需要事先指定类型,而且我从未见过任何习惯用法允许我这样做。我正在更新问题,以使我更清楚一点。你看到了吗:类型集实际上是infini我试图避免使用最新的Boost,因为我正在努力学习高级C++。他们有什么想法?它是一种讽刺,从我知道的最先进的C++代码是在Boost中……但是你可以阅读文档。我猜空洞指针和RTI(Type ID)。.但这只是一个猜测。正如我所说,boost非常先进,而且有一些巧妙的技巧。我不是说它不先进,我是说我想自己编写高级的东西,这样我就能更好地吸收它。我正在阅读boost。尽管如此,它似乎也可以。我会看看源代码。谢谢。哦,我明白了。很高兴能提供帮助。这是一个运行时解决方案。我正在寻找一个编译时解决方案。我看到了可变模板,但还不能深入研究。如果您愿意,我可以在完成后将其发布在这里。是的,请。知识是一道最好的热菜。