【问题标题】:Boost Graphs. Equivalent technique to Inheritance增强图。与继承等效的技术
【发布时间】:2015-02-28 17:38:59
【问题描述】:

我对 Boost Graphs 还是很陌生,也许我的问题有解决方案。

我有一个在图上执行某些计算的函数。它需要具有特定属性的图形,例如它期望所有边都有一个数字权重值,所有顶点都有一个数字字段(我们称之为颜色,它会在调用我的函数之前预设为一些有意义的值)。

想象一下,我有一组不同的图形类型,它们都在链接上具有数字权重属性,并且它们的所有顶点都具有数字颜色,但是它们还具有顶点和边的其他属性。 我的问题是如何将我的函数用于所有这些图表类型?

  1. 自然对我来说这似乎是一种继承,如果提升图是类,那么我的函数可以在基类上运行,并且我可以将指针传递给子类等。
  2. 最初我一直在尝试声明我的函数以接收模板图参数,但很快我意识到它不起作用(或者我无法弄清楚如何正确执行它)。

谢谢!

【问题讨论】:

  • 这正是在 BGL 中发明属性映射的目的,我建议花更多时间在文档上(这可能会让人很困惑)。 (选项 2 顺便说一句)

标签: c++ boost graph


【解决方案1】:

“等同于继承的技术”称为“多态性”,BGL 偏爱“静态多态性”(选项 2!)。

这是通用库的按你需要付费的方法。

可以调整任何类型(层次结构)以用于 BGL 的静态多态性:

还可以使用属性映射将属性(权重、颜色)链接到顶点/边。

【讨论】: