cri*_*ell 4 c++ inheritance templates
这似乎有效,但我不是100%肯定它是合法的,并会欣赏一些反馈.
我有一个派生自通用基类的子类.它类似于奇怪的重复模板模式,但不同.
在derived.h中:
template <class T>
class Derived : public T
{
public:
Derived();
... and some other stuff ...
};
Run Code Online (Sandbox Code Playgroud)
在derived.cpp中:
#include "derived.h"
template <class T>
Derived<T>::Derived()
{
...
}
// defining the variations I need here avoids linker errors
// see http://www.parashift.com/c++-faq-lite/templates.html#faq-35.13
template Derived<Base1>::Derived();
template Derived<Base2>::Derived();
Run Code Online (Sandbox Code Playgroud)
在其他一些文件中:
#include "derived.h"
void test()
{
Derived<Base1> d1;
Derived<Base2> d2;
... do stuff with d1 and d2 ...
}
Run Code Online (Sandbox Code Playgroud)
在C++中没有"泛型类"这样的东西.你拥有的是一个模板,一个模板不是一个类.相反,模板的实例成为类.然而,那些是完全不同的,独立的和不相关的类,所以Derived<A>并且Derived<B>彼此无关.
除此之外,你所做的一切都很好.在任何给定的模板实例 Derived<T>,T是一个实际的类(假设它是实际上是一个类,而不是,比方说,一个数组或一个int),你可以从它派生.
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |