由于有很多使用残差图的图算法,我认为实现在Objects Node和Edge上参数化的模板类resGraph是有意义的,它实现了一些基本功能,比如从文件中读取图形,打印流程并存储有关图表的所有相关信息。
现在我想编写PushRelabel类,我想成为resGraph类模板的特化。但我不想插入一些Node和Edge类型,我也想扩展类的功能,即我想在类中添加方法。怎么办呢?
答案 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);
};