我有两个类,Foo<T>
和Bar<T>
,派生自Base
. 每个都覆盖一个方法virtual Base* convert(ID) const
,其中是唯一标识或ID
的特定实例化的类型的实例(假装它是一个)。问题是需要能够返回一个实例,同样需要能够实例化. 由于它们都是模板,因此会导致和之间存在循环依赖关系。我该如何解决这个问题?Foo
Bar
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.
...
}
错误自然是“无效使用不完整类型”。