这是一个 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
“节点映射”的类型可以方便地从给定的默认参数中推断出来。节点映射本身可能是 a std::vector<T>
,因为节点只是一个索引。
问题:我在哪里存储向量std::vector<std::string> map1
, std::vector<std::double> map2
, std::vector<Foo> map3
.... ?
动态类型语言不会出现此问题。如何用 C++ 实现这种行为?