1
我有一個類只操作shared_ptr繼承層次結構(很簡單,有幾個類,說A, B, C
等繼承從一個類Base
)。由於我不需要操縱A,B,C ...本身的實例,它們只是前向聲明的。但是,當我試圖將shared_ptr<A>
傳遞給採用shared_ptr<Base>
的方法時,編譯器會窒息,因爲編譯器不知道A是從Base繼承的。除了static_pointer_cast
或#include
A類的標題,還有其他方法嗎?如果不是,你會選擇哪一個?正向聲明的類層次結構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