我是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的任何信息,我将不胜感激......
的问候,
阿图尔
答案 0 :(得分:5)
后来,
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
)
答案 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>