2009-06-20 42 views
7

我想根据用户输入的数量/数量生成大量对象(使用C++)。如何生成C++动态对象名称?

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

没有直接使用像 Object1,Object2的..... _对象 而不是名称的解决方法已经 类名*对象[] ,然后使用数组索引来获取对象?

在任何一种情况下,如果有人能够就此问题进行澄清,那将会很棒。

谢谢!

+0

要解决这个问题的含义几乎是不可能的。你在谈论一个可变长度的容器吗? – 2009-06-20 16:05:57

+0

啊。他说什么! – 2009-06-20 16:06:31

回答

6

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

8

如果你想动态调整大小的数组,然后使用std :: vector。您将无法调整内置阵列的大小。 如果你希望能够得到通过字符串名称的对象,那么你应该使用std ::地图,它有一个索引:

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

+1以补偿无法解释的向下投票 - 如果要通过字符串名称而不是数字处理对象,则映射是一种很好的方法。 – 2009-06-20 16:08:03

+0

感谢有关地图的想法。我肯定会更深入地研究它。 – 2009-06-22 15:47:14

+0

我知道这是非常旧的帖子,我可能不应该对此发表评论,但我不禁要注意,在这个示例中,您仍然需要使用特定于对象的名称(newClassname)。那么使用地图的关键是什么?假设声明是`std :: map `,那么是否可以像对象本身一样使用`mapname [key]`,而不用明确地命名它,就像`mapname [key] - > somefunc mapname`?我想了解为什么map不能用作动态生成的名字时地图很有用? – 2012-06-27 16:03:46

3

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

3

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

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

3

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

实现所需效果的一种方法是使用键为字符串的Map