【发布时间】:2012-01-27 12:07:20
【问题描述】:
我想知道是否可以创建继承类的指针映射。这是我正在尝试做的一个示例:
#include <string>
#include <map>
using namespace std;
class BaseClass
{
string s;
};
class Derived1 : public BaseClass
{
int i;
};
class Derived2 : public Derived1
{
float f;
};
// Here's what I was trying, but isn't working
template<class myClass>
map<string, myClass>m;
int main()
{
// Add BaseClasses, Derived1's, and/or Derived2's to m here
return 0;
}
我得到的错误是:
main.cpp(23): 错误 C2133: 'm' : 未知大小 main.cpp(23): error C2998: 'std::map<:string>m' : 不能是模板定义
我知道为什么会出现此错误,但我想知道是否可以创建一个可以容纳不同级别的继承类的映射?如果没有,是否有可能创建某种可以容纳各种班级类型的管理系统?或者我是否必须制作不同的地图/矢量/数组/等。每种类型的课程?
【问题讨论】:
-
您是否有理由不只是存储
BaseClass*s? -
是否可以有一张
BaseClass*s 的地图,并在保持其功能的同时将Derived1*s 和Derived2*s 添加到其中?我记得之前尝试过类似的事情,但BaseClass*s 的地图看起来像是将我给它的任何东西转换成BaseClass*,不管它最初是什么。 -
指向派生类的指针可以隐式转换为指向基类的指针(所以是的),但您必须有办法确定指针指向的实例的派生类型,那么你必须将基指针转换为派生指针才能使用任何派生函数。
-
@user1114983,您将只能使用
BaseClass中声明的方法(无需使用强制转换),但除此之外不会丢失任何功能。
标签: c++ inheritance stdmap