【发布时间】:2011-06-13 17:30:30
【问题描述】:
在我们的应用程序中,我们有一个在运行时接收属性的对象。例如,给对象添加一个浮点数:
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类型吗?
-
还没有。感谢您的链接 GWW。诚然,我并不像我应该的那样精通提升——如果你不确定要寻找什么,图书馆会有点吓人!
-
我同意那里的文档肯定会更好
标签: c++ pointers void-pointers