У меня есть два класса: Foo<T>
и Bar<T>
, полученные из Base
. Каждый переопределяет метод virtual Base* convert(ID) const
, где ID
- это экземпляр типа, который однозначно идентифицирует конкретный экземпляр Foo
или Bar
(притворите его a enum
). Проблема в том, что Foo::convert()
должен иметь возможность возвращать экземпляр Bar
, а также Bar::convert()
должен иметь возможность создавать экземпляр Foo
. Поскольку они оба являются шаблонами, это приводит к циклической зависимости между Foo.h
и Bar.h
. Как это разрешить?
Изменить:. Непрерывное объявление не работает, поскольку для реализации каждого метода требуется конструктор другого класса:
Foo.h
:
#include <Base.h>
template<class T> class Bar;
template<class T>
class Foo : public Base { ... };
template<class T>
Base* Foo<T>::convert(ID id) const {
if (id == BAR_INT)
return new Bar<int>(value); // Error.
...
}
Bar.h
:
#include <Base.h>
template<class T> class Foo;
template<class T>
class Bar : public Base { ... };
template<class T>
Base* Bar<T>::convert(ID id) const {
if (id == FOO_FLOAT)
return new Foo<float>(value); // Error.
...
}
Ошибка, естественно, "недопустимое использование неполного типа".