在我們的應用程序中,我們有一個在運行時接收屬性的對象。例如,爲float添加到對象:在運行時向對象添加任意類型
my_object->f("volume") = 1.0f;
檢索體積的工作方式相同:
cout << my_object->f("volume") << endl;
在內部,這是通過地圖串到它們各自的類型來表示。每種類型都有自己的訪問方法和地圖。它看起來像這樣:
map<string, float> my_floats;
map<string, int> my_ints;
map<string, void *> my_void_pointers;
哦,可怕的void *
。有時我們需要爲對象添加類或函數。我們沒有爲每個可能的類型都有單獨的地圖,而是在void *
地圖上定居。我們遇到的問題是清理。目前,我們圍繞着void *
所指向的每個類型的「懸掛」對象列表,並在必要時在這些單獨的列表上調用清除函數。
我不喜歡不得不使用void *
以及它需要進行適當清理的所有額外注意。有沒有更好的方法在運行時將任意類型存儲在對象中,可以通過字符串映射訪問,還可以通過析構函數自動清理嗎?
你看過[boost :: any](http://www.boost.org/doc/libs/1_40_0/doc/html/boost/any.html)類型嗎? – GWW 2011-06-13 17:35:15
還沒有。感謝鏈接GWW。我承認,我不太熟悉提升技術 - 如果您不確定要查找什麼,圖書館有點嚇人! – sinoth 2011-06-13 17:48:41
我同意那裏的文檔肯定會更好 – GWW 2011-06-13 18:37:40