私はあるクラス(B)が常に第2のクラス(D)に派生することを知っているクラス階層を持っています。 Bのコンストラクタでは、構築全体が完了する前に誰もそれを使用しようとすることがないと確信すれば、this
ポインタをD *に静的にキャストすることは安全ですか?私の場合、オブジェクトへの参照をさらに別のクラス(A)に渡したいと思います。建設中にこれをダウンキャストしていますか?
struct A
{
D & d_;
A(D & d) : d_(d) {}
};
struct D; //forward declaration
struct B
{
A a;
B() : a(std::static_cast<D&>(*this)) {}
};
struct D : public B
{};
このコードは安全ですか?
これは、Bが*常に* Aならば、クラスDがどんな値を追加しているのかという問題を提起します。 – JohnMcG
Bはテンプレートパラメータに基づいてメンバー関数を定義するクラステンプレートです。そのようないくつかのクラステンプレートがあり、テンプレートパラメータに依存するインターフェイスを提供するためにDによって継承されます。 –