二重ディスパッチ パターンを実装しようとしていますが、前方宣言では解決できない循環依存関係が発生します (この問題のリンクで解決されているため)。
以下は私の問題の例です:
ヘッダー 1:
class Object
{
virtual void dispatchAdd(Collection& c) const = 0;
};
class Blockage: Object
{
virtual void dispatchAdd(Collection& c) const
{
c.add(*this);
}
};
class Boundary: Object
{
virtual void dispatchAdd(Collection& c) const
{
c.add(*this);
}
};
ヘッダー 2:
class Collection
{
public:
void add(const Blockage& b)
{ ... }
void add(const Boundary& b)
{ ... }
...
private:
boost::unordered_set<Boundary> m_boundaries;
boost::unordered_set<Blockage> m_blockages;
}
を使用するには完全な型が必要なため、ヘッダー 2 でBoundary
andを宣言することはできません。この問題を解決するためのアドバイスはありますか?Blockage
boost::unordered_set