c++模板--类型擦除

来源:互联网 发布:c语言extern是什么意思 编辑:程序博客网 时间:2024/06/14 05:32
#ifndef WRAPPER_H#define WRAPPER_Hclass WrapperImpBase{public:    WrapperImpBase(){}    virtual ~WrapperImpBase(){}};template<typename T>class WrapperImp : public WrapperImpBase{public:    WrapperImp(T* ptr = 0)        :m_ptr(ptr){}    T* get() const { return m_ptr; }private:    T* m_ptr;};class Wrapper{public:    template<typename T>    Wrapper(T* ptr)    {        m_imp = new WrapperImp<T>(ptr);    }    ~Wrapper()    {        delete m_imp;    }    template<typename T>    T* get() const    {        if (m_imp)        {            WrapperImp<T> * imp = dynamic_cast<WrapperImp<T>*>(m_imp);            return imp->get();        }        return 0;    }private:    WrapperImpBase* m_imp;};#endif