私はpimplイディオムを使おうとしています。特に、実装クラスは別のインターフェースを実装します。
// public_class.h
class PublicClass
{
public:
/* public interfaces here */
private:
class _PublicClass_impl;
friend class _PublicClass_impl;
protected:
_PublicClass_impl * const _impl;
};
// public_class.cpp
class PublicClass::_PublicClass_impl : public SomeInterface
{
friend class PublicClass;
/* all sort of stuff ... */
};
私の質問は、次の状況でどのキャストを使用できるかということです。
// some_other_class.h
class SomeOtherClass : private PublicClass
{
void some_function()
{
// definition of _PublicClass_impl is unknown
// thus, _impl is opaque
SomeInterface * interface = dynamic_cast<SomeInterface *>(_impl); //??
/* more code ... */
}
};
この場合、dynamic_castは正常に機能しますか?この場合に使用できるキャストの他のタイプはありますか?