2016-12-25 4 views
0

Поскольку существует множество алгоритмов графа, которые используют остаточные графики, я думал, что имеет смысл реализовать класс шаблона resGraph, параметризованный над узлами объектов и Edge, который реализует некоторые базовые функции, такие как чтение графика из файл, печать потока и сохранение всей необходимой информации о графике.Специализированный класс шаблонов для графов

Теперь я хочу написать класс PushRelabel, который я хочу быть специализацией шаблона класса resGraph. Но я не просто хочу подключить некоторый тип Node и Edge, я также хочу расширить функциональные возможности этого класса, т. Е. Хочу добавить методы в класс. Как это может быть сделано?

+0

Что это такое? Специализация шаблонов для графиков не отличается от других специализаций. –

+0

То, что я нашел, когда я искал, только специализировалось на типах. Но я также хочу добавить методы. – user3726947

ответ

1

Существует множество библиотек графов, например BGL от Boost. Может быть, вам стоит взглянуть на них.

Добавление методов к специализации шаблонов не является проблемой. Обратите внимание, что специализация не может иметь ничего общего с исходным шаблоном. Например:

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); 
}; 
+0

ах ок. Но есть ли способ изменить имя? Потому что было бы очень неудобно вызывать все алгоритмы одинаковыми только потому, что я специализируюсь на остаточном классе графа. – user3726947

+0

, поэтому я бы написал struct B: public A и заменил шаблон частью с шаблоном <>, чтобы специализировать параметр шаблона в одно и то же время? – user3726947

Смежные вопросы