次のように単純化された循環依存関係があります。
// 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
テンプレートの実装を宣言から分離することについて前に読んだことがありますが、ベストプラクティスを認識しておらず、この場合に機能するかどうかはわかりません。この 2 つは、Derived
私Foo
のプログラム全体で広く使用されています。
この依存関係を解決するにはどうすればよいですか?