c++模板--类型擦除

#ifndef WRAPPER_H
#define WRAPPER_H

class WrapperImpBase
{
public:
    WrapperImpBase(){}

    virtual ~WrapperImpBase(){}
};



template
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
    Wrapper(T* ptr)

    {
        m_imp = new WrapperImp(ptr);
    }


    ~Wrapper()
    {
        delete m_imp;
    }

    template
    T* get() const
    {
        if (m_imp)
        {
            WrapperImp * imp = dynamic_cast*>(m_imp);
            return imp->get();
        }
        return 0;
    }

private:
    WrapperImpBase* m_imp;
};

#endif

你可能感兴趣的:(c++)