#pragma once #include "../../Common/DocxFormat/Source/Base/SmartPtr.h" template class Aggregat { public: Aggregat() { } Aggregat(T* _item) : m_item(_item) { } T& operator* () { *return m_item; } T* get() { return m_item.operator->(); } const T* get() const { return m_item.operator->(); } T* operator ->() { return m_item.operator->(); } const T* operator ->() const { return m_item.operator->(); } template const bool is() const { return (typeid(*this->m_item) == typeid(A)); } template A& as() { return static_cast(*this->m_item); } template const A& as() const { return static_cast(*this->m_item); } template <> const bool is() const { return true; } template <> I& as() { return static_cast(*this); } template <> const I& as() const { return static_cast(*this); } inline bool IsInit() const { return m_item.IsInit(); } inline T* Get() { return m_item.operator->(); } inline const T* Get() const { return m_item.operator->(); } protected: NSCommon::smart_ptr m_item; };