sin*_*oth 2 c++ pointers void-pointers
在我们的应用程序中,我们有一个在运行时接收属性的对象 例如,要向对象添加浮点数:
my_object->f("volume") = 1.0f;
Run Code Online (Sandbox Code Playgroud)
检索卷的工作方式相同:
cout << my_object->f("volume") << endl;
Run Code Online (Sandbox Code Playgroud)
在内部,这由字符串映射到它们各自的类型.每种类型都有自己的访问方法和地图.它看起来像这样:
map<string, float> my_floats;
map<string, int> my_ints;
map<string, void *> my_void_pointers;
Run Code Online (Sandbox Code Playgroud)
哦,可怕的void *.有时我们需要向对象添加类或函数.我们没有为每种可能的类型设置单独的地图,而是选择了void *地图.我们遇到的问题是清理.目前,我们保留了void *指向这些"悬空"对象的每种类型的列表,并在必要时在这些单独的列表上调用清理函数.
我不喜欢必须使用void *它以及正确清理所需的所有额外注意力.有没有更好的方法在运行时在对象中存储任意类型,可以通过字符串映射访问,并仍然可以通过析构函数自动清理?