如何继承模板化的基类?
我是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对于像我这样的新手任何信息......
问候,
阿图尔
后来,
class Derived : public Base
将不的工作,因为Base
不是一个类,它是一个类模板。比这取决于Derived
是否应该是一个模板,或者是否应该继承的Base
特定实例:
-
模板:
template<typename T> class Derived : public Base<T>
-
非模板:
class Derived : public Base<Something>
(其中
Something
是一些具体类型,如int
或char *
或std::string
)
要么
template class<T>
class Derived : public Base<T>
{ };
如果你想
Derived
与
Base<>
小号任何类型的工作
。
或者
class Derived : public Base<SomeSpecificType>
{ };
如果你想
Derived
仅与特定类型的
Base<>
工作
。
感谢,ildjarn,任何想法,我会得到更多和简单的例子开始我遇到STL元编程? – Atul 2011-04-15 10:03:49
@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
你的第二个例子是要走的路。
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>
感谢扬,我的派生类是模板类,以及。 – Atul 2011-04-15 10:00:32
@Jane,它可以是第三种方式:'模板 类派生:公共基地' –
iammilind
2011-04-15 10:24:58