专门用于图表的模板类

时间:2016-12-25 12:45:00

标签: c++ class templates graph

由于有很多使用残差图的图算法,我认为实现在Objects Node和Edge上参数化的模板类resGraph是有意义的,它实现了一些基本功能,比如从文件中读取图形,打印流程并存储有关图表的所有相关信息。

现在我想编写PushRelabel类,我想成为resGraph类模板的特化。但我不想插入一些Node和Edge类型,我也想扩展类的功能,即我想在类中添加方法。怎么办呢?

1 个答案:

答案 0 :(得分:1)

有很多图库,例如Boost的BGL。也许你应该看看它们。

向模板专业化添加方法不是问题。请注意,专业化可能与原始模板无关。例如:

template<typename T>
struct A
{
    void B(int);
};

template<>
struct A<int>
{
    float C(char*);
};

template<>
struct A<double>
{
    void D(int, int, int);
};

这很好。对于不同类型,您将拥有彼此没有任何共同点的实例化。你也可以写:

template<typename T>
struct B : public A<T>           // Class template can have base class.
{                                // It can be either a class or instantiation
    void B(int);                 // of some class template.
    void B2(int, int, int);
};

template<>
struct B<int> : public A<int>    // Specialization for int.
{
    void B(int);
    void B2(int, int, int);
};