我想根據用戶輸入的數量/數量生成大量對象(使用C++)。如何生成C++動態對象名稱?
現在我在某處聽說它必須使用指針技巧來完成,創建一個指向所需對象類型的數組的指針,然後動態增加數組的大小(在運行時)。
沒有直接使用像 Object1,Object2的..... _對象 而不是名稱的解決方法已經 類名*對象[] ,然後使用數組索引來獲取對象?
在任何一種情況下,如果有人能夠就此問題進行澄清,那將會很棒。
謝謝!
我想根據用戶輸入的數量/數量生成大量對象(使用C++)。如何生成C++動態對象名稱?
現在我在某處聽說它必須使用指針技巧來完成,創建一個指向所需對象類型的數組的指針,然後動態增加數組的大小(在運行時)。
沒有直接使用像 Object1,Object2的..... _對象 而不是名稱的解決方法已經 類名*對象[] ,然後使用數組索引來獲取對象?
在任何一種情況下,如果有人能夠就此問題進行澄清,那將會很棒。
謝謝!
到目前爲止沒有人解釋了爲什麼你的想法有缺陷。 C++是一種編譯語言,並且將源程序轉換爲高效的機器代碼變得非常有用。因爲這個原因,只有在編譯時,你給變量的名字才能被程序使用,當你把它從源代碼變成可執行文件的時候。之後,當您想要動態創建對象時,這些類型的信息將不再可用。程序只知道機器指令操作數所在的機器地址。
如果你想動態調整大小的數組,然後使用std :: vector。您將無法調整內置陣列的大小。 如果你希望能夠得到通過字符串名稱的對象,那麼你應該使用std ::地圖,它有一個索引:
std::map<string, Classname> myMap;
myMap["Object1"] = Classname();
Classname newClassname = myMap["Object1"];
+1以補償無法解釋的向下投票 - 如果要通過字符串名稱而不是數字處理對象,則映射是一種很好的方法。 – 2009-06-20 16:08:03
感謝有關地圖的想法。我肯定會更深入地研究它。 – 2009-06-22 15:47:14
我知道這是非常舊的帖子,我可能不應該對此發表評論,但我不禁要注意,在這個示例中,您仍然需要使用特定於對象的名稱(newClassname)。那麼使用地圖的關鍵是什麼?假設聲明是`std :: map
沒有,沒有。而且,你不需要;使用std::vector
。
9年前我開始編程時,我問自己同樣的問題。答案是:你不能。
你確實可以使用數組並動態調整它的大小,但是使用stl向量要容易得多(一旦你學會了如何使用它)。
你不能這樣做,因爲C++沒有變量(和元數據)可以駐留的「環境」(reflection)。而且,在C++中編譯代碼時,所有變量名都是消失。
實現所需效果的一種方法是使用鍵爲字符串的Map。
要解決這個問題的含義幾乎是不可能的。你在談論一個可變長度的容器嗎? – 2009-06-20 16:05:57
啊。他說什麼! – 2009-06-20 16:06:31