矢量与不同类型的向量

JRR*_*JRR 3 c++ boost stl vector c++11

我想构建一个向量的向量.这个问题已经多次发布在SO上,但我找不到令人满意的答案.那是因为:

  • 每个向量可以有不同的类型
  • 我不知道编译时的类型
  • 我不知道它将包含多少向量

基本上我希望以后可以在伪代码中做类似的事情

types = ["char", "int", "double", "int"]
container<vector> x

foreach (type in types)
{
  if (type == "char")
    x.push_back(vector<char>)
  else if (type == "int")
    x.push_back(vector<int>)
  else
    x.push_back(vector<double>)
}
Run Code Online (Sandbox Code Playgroud)

然后我希望能够做到这一点

x[0].push_back("a")
x[1].push_back(1)
x[2].push_back(3.1416)
Run Code Online (Sandbox Code Playgroud)

我想boost::any可能会对我有所帮助,但我还不熟悉.

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

jbc*_*coe 8

也许你可以使用变体矢量?

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>>;
Run Code Online (Sandbox Code Playgroud)

如果每个文件具有相同类型的数据,您可以在运行时查找它是什么,并推回到适当的变量向量.

如果文件有混合数据,那么你可以使用

std::vector<std::vector<std::variant<char, int, double>>>;
Run Code Online (Sandbox Code Playgroud)

但你必须检查每次插入.

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