【发布时间】:2012-12-10 12:20:22
【问题描述】:
我正在尝试创建一个基于通用图形结构的面向对象模板,但是在我的设计中我遇到了一个可能的循环依赖,我不确定如何避免。
我将我的顶点和边类定义如下:
template <class label_type, class edge_type>
class basic_vertex { .. }
template <class vertex_type, class weight_type = std::int32_t>
class basic_edge { .. }
在顶点类中,我通过将指向它们的指针存储在 std::list 中来跟踪连接到节点的内边和外边。
在边缘对象中,我保留了 2 个引用来表示源顶点和目标顶点。
如果我要填写顶点模板参数,我需要知道边的类型。为了知道边的类型,我需要知道顶点的类型。
知道如何解决这个问题吗?
【问题讨论】:
-
您能解释一下为什么要使用模板吗?
-
@alestanis:我正在尝试使其尽可能通用且尽可能快。
-
Re 我正在努力使其尽可能通用且尽可能快:模板并不是让事情变得更快的神奇编程灰尘。就通用性而言,这听起来像是过早的优化。再说一遍,你为什么要使用模板?
-
@DavidHammen 好吧,我希望根据用例调整顶点的标签。有时我可能希望它是一个数字,而其他时候我可能希望它是一个字符串,甚至是一些自定义类。我还计划扩展基本版本,以便在其中嵌入数据结构。例如,我可能会在节点中嵌入地理坐标以及关于什么类型的汽车可以通过边缘的信息。
-
边缘的权重类型也是如此:有时我可能希望它是 int 而其他时候我可能需要它是 double 或自定义数字类型。
标签: c++ templates metaprogramming circular-dependency