【发布时间】:2013-02-05 12:01:24
【问题描述】:
这是一个 C++(11) 设计问题:
假设我想创建一个图形数据结构,您可以在其中将节点/边映射到任意属性。 (它是一个图表并不真正相关,它可能是具有属性的元素的任何容器,但这是我的示例。)
有了这样的数据结构,我可以为所有节点动态添加一个新属性:
Graph G;
G.addNodeMap("color", "white"); // map name, default value
...然后为一个节点设置它:
node v;
G.setAttr("color", v, "blue");
...并删除属性以节省内存:
G.deleteNodeMap("color");
G.addNodeMap 获取映射的标识符(可能是字符串)和条目的默认值。使用 C++11,“节点映射”的类型 T 可以方便地从给定的默认参数中推断出来。节点映射本身可以是std::vector<T>,因为节点只是一个索引。
问题:我在哪里存储向量std::vector<std::string> map1、std::vector<std::double> map2、std::vector<Foo> map3....?
动态类型语言不会出现此问题。如何使用 C++ 实现此行为?
【问题讨论】:
-
使用任意类型进行这项工作通常会带来更多的麻烦。您将不得不进行一些严肃的类型擦除。
-
@NicolBolas 那么存储这些属性的替代方法是什么?
-
我目前唯一想到的就是 boost::any
标签: c++ oop c++11 dynamic-typing