2011-04-15 104 views
0


我是STL新手。我有如下如何继承模板化的基类?

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

现在,我想我的设计框架,使得我的继承类将从这个类公有派生,并在各自的实现都实现了富写的模板基类。问题是我不知道如何从模板基类继承? 难道如下...

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

或普通的C++方式

class Derived : public Base 
{ 
}; 

有什么建议?此外,我将不胜感激为入门STL对于像我这样的新手任何信息......

问候,
阿图尔

回答

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

+0

感谢扬,我的派生类是模板类,以及。 – Atul 2011-04-15 10:00:32

+0

@Jane,它可以是第三种方式:'模板 类派生:公共基地' – iammilind 2011-04-15 10:24:58

1

要么

template class<T> 
class Derived : public Base<T> 
{ }; 
如果你想 DerivedBase<>小号任何类型的工作

或者

class Derived : public Base<SomeSpecificType> 
{ }; 
如果你想 Derived仅与特定类型的 Base<>工作

+0

感谢,ildjarn,任何想法,我会得到更多和简单的例子开始我遇到STL元编程? – Atul 2011-04-15 10:03:49

+0

@Atul:关于在线资源,[Comeau模板FAQ](http://www.comeaucomputing.com/techtalk/templates/)和[C++ FAQ Lite模板章节](http://www.parashift.com/ C++ - faq-lite/templates.html)是体面的。我真的不知道模板上有任何* light-reading *书籍,但是如果您想跳到深层,那么就有[Modern C++ Design](http://www.amazon.com/dp/0201704315/)和[C++ Template Metaprogramming](http://www.amazon.com/dp/0321227255/)。 – ildjarn 2011-04-15 10:07:07

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 

}; 
0

除了上述的答案,也知道它可以在以下几个方面也:

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

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