是否可以创建 std::type_info 数组?[复制]

Is it possible to create an array of std::type_info? [duplicate]

提问人:edumir 提问时间:11/7/2022 更新时间:11/7/2022 访问量:152

问:

我正在从内存映射导入数据,并且数据类型映射到某些整数值。

这是一个开关案例示例,我使用模板创建具有正确类型的值。但是,这个开关案例有更多的代码和许多其他案例。

void function(std::vector<int> impTypes, int idxImpValue)
{
  // impTypes = array of imported datatypes
  // idxImpValue = index of imported value
  switch(impTypes[idxImpValue])
  {
    case 0: { double value = getValue<double>(idxImpValue); }
      break;

    case 6: { int value = getValue<int>(idxImpValue); }
      break;

    case 23: { uint64_t value = getValue<uint64_t>(idxImpValue); }
      break;
  return 0;
}

除了有大开关盒外,我还有很多开关盒,每当我需要改变一些东西时,这都会让我有点痛苦。

我想知道我是否可以摆脱开关大小写,以及我是否可以根据该整数值以某种方式将类型传递给模板,因此为什么如果我能创建一个 std::type_info 数组会很棒。

void function(std::vector<std::type_info> impTypes, int idxImpValue)
{
  impTypes[idxImpValue] value = getValue<impTypes[idxImpValue]>(idxImpValue);
  return 0
}
C++ 数组 模板 类型 std

评论

0赞 Alan Birtles 11/7/2022
我们可能需要有关您要实现的目标的更多详细信息。不能将变量用作模板参数
0赞 Peng Guanwen 11/7/2022
您需要对提取的内容做什么?您是使用相同的代码来处理它们,还是在不同的情况下使用不同的代码?value
0赞 edumir 11/7/2022
@AlanBirtles 数据是从内存映射导入的,该内存映射提供了一种识别变量类型的方法。我获取值,使用正确的数据类型创建值并显示它。
0赞 edumir 11/7/2022
@PengGuanwen除 std::string 之外,每种数据类型的代码都是相同的,我想要实现的是尽可能少地使用案例。由于代码在所有情况下都是重复的,因此我认为可能有一种方法可以创建具有正确数据类型的“值”变量,而无需在每种情况下都手动创建它。
0赞 user12002570 11/7/2022
如何初始化 vector<typeinfo>?

答:

1赞 j6t 11/7/2022 #1

是否可以创建一个 ?std::type_info

不可以,因为没有构造函数,因此既不可移动也不可复制。std::type_info

但是,您可以拥有 std::vector<std::type_index> 并将其用作类型的数据库。