如何继承templatised Base类?

时间:2011-04-15 09:51:47

标签: c++ templates


我是STL的新手。我编写了一个Template Base类,如下所示

template <class T>  
class Base  
{  
    public:    
    //Constructor and Destructor ..  
    Base();  
    virtual ~Base();  
    virtual foo() = 0;  
};  

现在,我想设计我的框架,以便我的继承类将从这个类公开派生,并将在各自的实现中实现foo。问题是我不知道如何从Template Base类继承? 它是如下......

template class<T>  
class Derived : public Base<T>  
{ 
  // Implementation of Derived constructor etc and methods ...  
};  

或普通C ++方式

class Derived : public Base  
{  
};  

有什么建议吗?另外,对于像我这样的新手开始使用STL的任何信息,我将不胜感激......

的问候,
阿图尔

4 个答案:

答案 0 :(得分:5)

后来,

class Derived : public Base

工作,因为Base不是一个类,它是一个类模板。这取决于Derived是否应该是模板,还是应该继承Base的特定实例:

  • 模板:

    template<typename T>
    class Derived : public Base<T>
    
  • 非模板:

    class Derived : public Base<Something>
    

    (其中Something是某种具体类型,如intchar *std::string

答案 1 :(得分:1)

无论

template class<T>  
class Derived : public Base<T>  
{ };

如果您希望Derived使用任何类型的Base<>

或者

class Derived : public Base<SomeSpecificType>
{ };

如果您希望Derived仅使用特定类型的Base<>

答案 2 :(得分:0)

你的第二个例子是要走的路。

template class<T>   
public Base<T>   
{    // Implementation of Base constructor etc and methods ...   
}; 


template class<T>   
class Derived : public Base<T>   
{    // Implementation of Derived constructor etc and methods ...   
public:
    Derived() : Base<T>() { } //have to construct the proper instanciation of Base

}; 

答案 3 :(得分:0)

除上述答案外,还要注意它也可以采用以下方式:

template<typename T>
class Derived : public Base<Something>  // Something is some concrete type

template<typename T, typename U>
class Derived : public Base<U>