2009-06-20 52 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