在C++動態轉換,我想能夠做到以下幾點:從封裝接口
struct IWrapper {
template<typename U>
U* dynamic_cast_to() { ??? } // what to do here?
};
template<typename T>
struct Wrapper : IWrapper {
Wrapper(T* _p) :p(_p) {}
T* p;
};
有了這個,我希望能夠做到
SomeDerived *a = new SomeDerived;
IWrapper *x = new Wrapper<SomeDerived>(a);
SomeBase *b = x->dynamic_cast_to<SomeBase>()
dynamic_cast_to()
應該返回一個指針,如果確實SomeDerived
繼承SomeBase
和NULL
,如果不是,正常dynamic_cast
的工作方式相同。
這甚至可能嗎?
這將無法正常工作。能夠將'dynamic_cast'' SomeDerived'轉換爲'SomeBase'並不意味着您可以''包裝器''轉換爲'包裝器'。這就是整個問題。 –
shoosh
2013-02-24 17:35:46
您要求將'Wrapper'轉換爲'SomeBase',而不是'包裝'。你是什麼意思? –
Useless
2013-02-24 17:43:54
嘿2個贊成票是什麼?任何downvoter照顧解釋?他們在我看來很不合適。 – 2013-02-24 20:09:10