小编TsS*_*kTo的帖子

带派生类的C++模板

我正在写一个库,在其中我有一个类BaseClass.使用该库的任何人都将创建自己的继承自BaseClass的类.我有另一个类,我们称之为Manager,它包含一个BaseClass指针的向量,它可以包含从BaseClass派生的任何对象.

Manager类必须处理添加到其BaseClass向量的任何对象的创建和销毁.这是因为可以随时删除向量中的任何对象,也可以删除Manager本身.因此,库的用户无法通过向指向从BaseClass派生的现有对象传递指针来向Manager的baseClass向量添加对象.实际上,我可以允许用户这样做.但这将涉及复制虚拟对象,我宁愿不这样做.

为了解决这个问题,我正在尝试使用模板功能.在尝试将其添加到Manager的向量时,用户应传递从BaseClass派生的对象的类型.这就是我现在拥有的.

//Manager.h
#include <vector>
#include "BaseClass.h"
#include <typeinfo>

class Manager {
    //Vector holding pointers to any objects inherited from BaseClass
    vector<BaseClass*> baseClasses;

    //Template function that needs to add NEW object to baseClass vector
    //This I'm having problems with
    template<class T>
    BaseClass* Add() {
        BaseClass* baseClass = new T();
        baseClasses.push_back(baseClass);
        return baseClass;
    }

    //Template function that gets object from baseClass vector
    //This works fine
    template<class T>
    BaseClass* Get() {
        for (int i = 0; i < baseClasses.size(); i++) { …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance templates derived-class

1
推荐指数
1
解决办法
2662
查看次数