Subclass B Inherits From a Template Class A<B>
本问题已经有最佳答案,请猛点这里访问。
我最近偶然发现了类似这样的代码,我无法将我的头绕在上面:
1 2 3 4 5 6 7 8 | template<typename T> class A { } class B: A { } |
所以我的一般问题是:
- 为什么不给出编译错误?具体来说,如果
B 还没有定义,那么类B 如何继承模板类A 呢? - 什么时候需要这种结构?
其中一个特性:这个模板模式可以帮助您避免使用
假设您有这个代码结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Item { public: virtual void func() = 0; } class A : public Item { // … } class B : public Item { // … } Item *item = new A(); item->func(); |
它可以替换为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | template<typename T> class Item { public: void func() { T::func(); } } class A : public Item<A> { // … } class B : public Item { // … } Item<A> *item = new A(); item->func(); |
这样可以避免虚拟函数调用。这可以做一些性能改进…