代码之家  ›  专栏  ›  技术社区  ›  FlatLander

如何生成C++动态对象名称?

  •  7
  • FlatLander  · 技术社区  · 15 年前

    我想根据用户输入的数量/数量来生成多个对象(C++)。

    现在,我听说必须使用指针技巧,创建指向所需对象类型数组的指针,然后动态增加数组的大小(在运行时)。

    是否没有直接使用以下名称的解决方案? 对象1,对象2…..对象X 而不是 类名*对象[] 然后使用数组索引获取对象?

    在这两种情况下,如果有人能澄清这个问题,那就太好了。

    谢谢!

    5 回复  |  直到 15 年前
        1
  •  6
  •   SingleNegationElimination    15 年前

    到目前为止,还没有人解释为什么你的思维有缺陷。C++是一种编译语言,它会花费大量的精力将源程序转换成高效的机器代码。因此,只有在编译时,当您将变量从源代码转换为可执行文件时,您提供的变量名才对程序可用。之后,当您想要动态地创建对象时,这些类型的信息将不再可用。程序只知道机器指令的操作数所在的机器地址。

        2
  •  8
  •   Dmitry Risenberg    15 年前

    如果需要动态调整数组大小,请使用std::vector。您将无法调整内置数组的大小。 如果希望能够按字符串名称获取对象,那么应该使用std::map,它有一个索引器:

    std::map<string, Classname> myMap;
    myMap["Object1"] = Classname();
    Classname newClassname = myMap["Object1"];
    
        3
  •  3
  •   David Seiler    15 年前

    不,没有。而且,你不需要;使用 std::vector .

        4
  •  3
  •   StackedCrooked    15 年前

    当我9年前开始编程时,我问自己同样的问题。答案是:你不能。

    您确实可以使用一个数组并动态地调整它的大小,但是使用STL向量要容易得多(一旦您学会了如何使用它)。

        5
  •  3
  •   Nick Dandoulakis    15 年前

    你不能这么做,因为C++没有一个“环境”。 reflection )变量(和元数据)可以驻留的位置。此外,在C++中,所有变量名都是 消失的 编译代码时。

    达到你想要的效果的一种方法是使用 Map 其中键是字符串。