【问题标题】:How to generate C++ Dynamic Objects names?如何生成 C++ 动态对象名称?
【发布时间】:2023-03-27 22:35:01
【问题描述】:

我想根据用户输入的数量/数字生成一些对象(在 C++ 中)。

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

没有直接使用类似名称的解决方法吗 对象1,对象2.....对象X 而不是拥有 类名 *Object[] 然后使用数组索引获取对象?

无论哪种情况,如果有人能澄清这个问题,那就太好了。

谢谢!

【问题讨论】:

  • 几乎不可能从问题中弄清楚您的意思。你说的是可变长度的容器吗?

标签: c++ arrays dynamic pointers object


【解决方案1】:

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

std::map<string, Classname> myMap;
myMap["Object1"] = Classname();
Classname newClassname = myMap["Object1"];

【讨论】:

  • +1 以补偿无法解释的反对票——如果您想通过字符串名称而不是数字来处理对象,地图是一种很好的方法。
  • 感谢关于地图的想法。我当然也会更深入地研究它。
  • 我知道这是一个很老的帖子,我可能不应该对此发表评论,但我不禁注意到在这个例子中,你仍然必须使用对象特定的名称(newClassname)。那么使用地图有什么意义呢?是否可以像对象本身一样使用mapname[key],而无需明确命名它,就像mapname[key]-&gt;somefunc() 假设声明是std::map&lt;key, someclass*&gt; mapname?我试图理解如果地图条目不能用作动态生成的名称,为什么地图很有用?
【解决方案2】:

到目前为止,没有人解释为什么你的想法有缺陷。 C++ 是一种编译语言,它竭尽全力将源程序转换为高效的机器代码。出于这个原因,你给变量的名字只有在编译时才对程序可用,当你把它从源代码转换成可执行文件时。之后,当您想要动态创建对象时,这些信息不再可用。程序只知道机器指令的操作数所在的机器地址。

【讨论】:

  • 感谢您的解释,正是我需要的(理解)。干杯!
【解决方案3】:

不,没有。此外,您不需要;使用std::vector。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 9年前你说:)这让我不得不等很久,嘿嘿!非常感谢您的回复!
    【解决方案5】:

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

    实现您想要的效果的一种方法是使用Map,其中键是字符串。

    【讨论】:

    • 再次感谢地图的创意。我一定会看看的。
    猜你喜欢
    • 2018-08-09
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多