私は、継承階層に対してshared_ptrだけを操作するクラスを持っています(かなり単純です。Base
から継承するA, B, C
などいくつかのクラスがあります)。私はA、B、C ...のインスタンスを操作する必要はないので、それらは前方宣言されているだけです。しかし、をメソッドshared_ptr<Base>
に渡そうとすると、コンパイラは、AがBaseから継承していることを知らないので、チョークします。 static_pointer_cast
または#include
のいずれかのクラス以外の方法がありますか?もしそうでなければ、あなたはどちらを選ぶでしょうか?前方宣言されたクラス階層のshared_ptr間のキャスト
編集:いくつかのコード
// in some file: (Base.h)
class Base
{
/*code*/
}
// in another file (A.h)
class A : public Base
{
}
// in my file (impl.cpp)
class A; // forward declaration
void Dummy()
{
std::shared_ptr<A> myPtr;
// we have somewhere: void sillyFunction(shared_ptr<Base> foo)
sillyFunction(myPtr); // does not compile, as no conversion is found.
}
コード例は、単語よりも優れた問題を示しています。 –
実装を宣言から分離し、実装に派生クラスの完全な宣言を提供します。これはうまくいくはずです。それでも問題が解決しない場合は、詳細を投稿してください。 –
宣言は実装とは別です。事は、私は名前の依存関係しか持たないようで、クラスA、B、Cに完全に依存したいとは思っていません。 – wendazhou