A pointer to abstract template base class?

前端 未结 2 1700
梦毁少年i
梦毁少年i 2021-02-04 13:35

I cannot figure this out. I need to have an abstract template base class, which is the following:


template  class Dendrite
{
    public:
        Den         


        
2条回答
  •  春和景丽
    2021-02-04 14:16

    Typically this is done by your template inheriting from an interface class, IE:

    template  class Dendrite : public IDendrite
    {
            public:
                    Dendrite()
                    {
                    }
    
                    virtual ~Dendrite()
                    {
                    }
    
                    void Get(std::vector &o) = 0;
    
            protected:
                    std::vector _data;
    };
    

    and then you're IDendrite class could be stored as pointers:

    std::vector m_dendriteVec;
    

    However, in your situation, you are taking the template parameter as part of your interface. You may also need to wrap this also.

    class IVectorParam
    {
    }
    
    template 
    class CVectorParam : public IVectorParam
    {
        std::vector m_vect;
    }
    

    giving you

    class IDendrite
    {
       ...
    public:
       virtual ~IDendrite()
       virtual void Get(IVectorParam*) = 0; 
    }
    
    template  class Dendrite : public IDendrite
    {
      ...
      // my get has to downcast to o CVectorParam
      virtual void Get(IVectorParam*);
    };
    

提交回复
热议问题