我有一个循环依赖简化为以下内容:
// 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在我的程序中被广泛使用。
我该如何解决这种依赖关系?