Я определил класс MCFLemonSolver в файле MCFLemonSolver.h. Вот определение:
Код: Выделить всё
template< template< typename , typename , typename > typename Algo ,
typename GR , typename V , typename C >
requires LEMONGraph< GR >
class MCFLemonSolver : public CDASolver, Fields< Algo >
Код: Выделить всё
int compute( bool changedvars = true ) override;
В MCFLemonSolver есть определение этого метода это работает правильно, но я хочу переместить его из .h в файл .cpp и специализировать метод для каждого алгоритма, который есть в моем проекте, но есть проблема.
Код: Выделить всё
AlgoКод: Выделить всё
template
template
template
int MCFLemonSolver< AlgoType::Algo_GRVC, GR, V, C >::compute( bool changedvars )
Код: Выделить всё
struct AlgoType {
using Algo_GRVC = NetworkSimplex;
};
ошибка: использование необъявленного идентификатора AlgoType
Кажется, область действия класса MCFLemonSolver недоступна.
Я определил пространство имен SMSpp_di_unipi_it в начале MCFLemonSolver.h, которое обертывает создайте весь файл и используйте оператор **using** SMSpp_di_unipi_i в начале файла .cpp.
Определение использования для каждой комбинации параметров шаблона — худший способ сделать это, поскольку мне нужно определить 16 различных сигнатур Compute() для каждой комбинации, иначе я могу определить метод Compute() в классе и я почти уверен, что это сработает.
Пример
Код: Выделить всё
#include
using namespace std;
//I have a class M that depends on a template class A
template< template< typename > class A, typename C>
class M{
virtual int foo(bool){}
};
//Then i have a specific class
template< typename C >
class MyA;
template< typename C >
class MyA{
public:
C value(){}
};
//Now i want to specialize on A, but none on C.
//Hence
template
class M{
public:
int foo(bool b){return true;}
};
int main()
{
M m;
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78520044/template-specialisation-over-a-class-that-is-itself-template[/url]
Мобильная версия