C++ 不同类型向量的向量

C++ 不同类型向量的向量,c++,c++11,vector,boost,stl,C++,C++11,Vector,Boost,Stl,我想构造一个向量的向量。这个问题已经贴了很多次了,但我没有找到满意的答案。这是因为: 每个向量可以有不同的类型 我不知道编译时的类型 我不知道它将包含多少向量 基本上,我希望能够在伪代码中做类似的事情 后来 我认为boost::any可能对我有所帮助,但我还不熟悉boost 关键是,即使听起来很奇怪,这也是我真正想做的。我不想要结构的向量,我真的想要一个包含不同类型的std::vector的容器(不管是哪一个)。原因是我正在读取二进制文件。文件头说明了数据的数量及其类型,但它可以从一个文件更

我想构造一个向量的向量。这个问题已经贴了很多次了,但我没有找到满意的答案。这是因为:

  • 每个向量可以有不同的类型
  • 我不知道编译时的类型
  • 我不知道它将包含多少向量
基本上,我希望能够在伪代码中做类似的事情 后来

我认为
boost::any
可能对我有所帮助,但我还不熟悉boost


关键是,即使听起来很奇怪,这也是我真正想做的。我不想要结构的向量,我真的想要一个包含不同类型的
std::vector
的容器(不管是哪一个)。原因是我正在读取二进制文件。文件头说明了数据的数量及其类型,但它可以从一个文件更改为另一个文件。因此,在编译时无法知道它。

也许您可以使用变量向量

using ints = std::vector<int>;
using chars = std::vector<char>;
using doubles = std::vector<double>;
using mixed_data_t = std::vector<std::variant<chars, ints, doubles>>;
使用ints=std::vector;
使用chars=std::vector;
使用doubles=std::vector;
使用混合数据\u t=std::vector;
如果每个文件都有相同类型的数据,您可以在运行时找出它是什么,并将其推回到相应的变量向量中

如果文件包含混合数据,则可以使用

std::vector<std::vector<std::variant<char, int, double>>>;
std::vector;
但您必须检查每次插入


我非常确信
boost::any
不是您正在寻找的解决方案,因为每次插入后类型信息都会丢失。

静态类型语言应该如何解析
x[I]。推回(…)
i
不是编译时常量表达式时?使用
boost/std::variant
@geza:如果OP在编译时不知道类型,那么variant将没有帮助<代码>任何都会更好,但这闻起来有设计缺陷的味道。@AndyG:我想他知道可能的类型,他只是不知道给定向量的类型。@AndyG但它闻起来有设计错误的味道。这就是为什么我对这个问题感到尴尬的原因……关键是文件是标准化的,但可以有免费的额外数据。标题清楚地说明了它包含的内容,但在编译时我不知道。只有一次我读取了头。@JRR变量的类型是在运行时决定的。运行时类型在作为模板参数发送的类型之间可能有所不同。请确保您有
c++17
支持。是否有不需要c++17的等效boost?可以使用boost::variant或eggs::variant。
using ints = std::vector<int>;
using chars = std::vector<char>;
using doubles = std::vector<double>;
using mixed_data_t = std::vector<std::variant<chars, ints, doubles>>;
std::vector<std::vector<std::variant<char, int, double>>>;