如何继承模板化基类

How to inherit a templatised Base class?

本文关键字:基类 继承 何继承      更新时间:2023-10-16


我是STL的新手。我已经写了一个模板基类如下

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

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

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

或普通C++方式

class Derived : public Base  
{  
};  

有什么建议吗?此外,我将感谢为像我这样的新手提供任何入门STL的信息。。。

问候,
Atul

后来的

class Derived : public Base

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

  • 模板:

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

    class Derived : public Base<Something>
    

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

任一

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

如果您希望Derived与任何类型的Base<>一起工作。

class Derived : public Base<SomeSpecificType>
{ };

如果希望CCD_ 10仅与特定类型的CCD_。

您的第二个示例就是接下来的方法。

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
}; 

除了上面的答案外,还要注意它也可以通过以下方式:

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

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