VS2015中此类模板继承写法能否实现?若不可行求替代方案
你的模板继承写法完全可行!编译失败大概率是拼写错误
嘿,这个写法本身是完全合法的C++代码,你在VS2015里编译失败,大概率是因为一个不起眼的拼写错误:
你定义的模板类名叫 DerivedClass,但实例化的时候写成了 DeriveClass(少了末尾的字母 d),这是编译器报错的核心原因。
修正后的完整代码示例
#include <iostream> // 定义模板派生类,以模板参数作为基类 template<class BaseClassT> class DerivedClass : public BaseClassT { public: void print() { std::cout << "I'm a derived class based on BaseClassT!" << std::endl; } }; // 普通基类 class BaseClass { public: void baseFunc() { std::cout << "Base class function" << std::endl; } }; int main() { // 注意类名是 DerivedClass,不是 DeriveClass DerivedClass<BaseClass> c; c.baseFunc(); // 可以调用基类的成员函数 c.print(); // 调用派生类自己的成员函数 return 0; }
关于这个写法的说明
这种以模板参数作为基类的写法是C++的标准特性,常用于以下场景:
- 混入(Mixin)模式:给不同的基类快速添加通用功能,比如日志、序列化能力
- 奇异递归模板模式(CRTP):实现静态多态、避免虚函数开销的进阶技巧
- 通用包装类:对任意基类进行扩展包装
如果修正拼写后仍然在VS2015中编译失败,可以检查一下项目设置:确保开启了C++11及以上标准支持(VS2015默认支持,但如果手动修改过设置的话需要确认)。
内容的提问来源于stack exchange,提问作者user11476359
相关产品推荐
相关产品推荐

