我有一个循环依赖简化为以下内容:
// Bar.h
struct Bar {};
// Base.h
#include "Foo.h"
struct Bar;
struct Base {
void func(std::shared_ptr<Foo<Bar>> foobar); // use methods of Foo in some way.
};
// Derived.h
#include "Base.h"
struct Derived : public Base {};
// Foo.h
#include "Derived.h"
template <typename T>
struct Foo {
void func(std::shared_ptr<Derived> d) {
// use methods of Derived in some way.
}
};
我不能简单地向前声明Foo
,Base.h
因为它是一个模板类,Base
由于Derived.h
多态性而不能向前声明,也Derived
不能Foo.h
因为Foo::func
使用Derived
.
我之前读过关于将模板实现与声明分开的内容,我认为我不知道最佳实践并且不确定它是否适用于这种情况。这两个,Derived
并且Foo
在我的程序中被广泛使用。
我该如何解决这种依赖关系?