それぞれのヘッダーでクラスを前方に宣言することで循環インクルード依存関係を分割していますが、クラス内で型エイリアスを使用するという既存の規則に小さなしわがあります。
#include <memory>
class C {
public:
using Ptr = std::shared_ptr<C>;
};
理想的には、次のようなことが可能です。
#include <memory>
class C;
using C::Ptr = std::shared_ptr<C>;
しかし、C
は完全なタイプではないため、それは不可能です(まだ)。エイリアスを作成することは可能だと思いますが、ネストされたタイプのエイリアスを作成するために完全に十分なタイプとして確立される、または他のキーワードをusing CPtr = std::shared_ptr<C>;
使用して明らかな何かが欠落していることを望んでいました。typename
C