【发布时间】:2009-10-06 16:21:32
【问题描述】:
我正在尝试使用我希望如何执行特定功能的专业化来子类化一个类。但是,当我将类存储在列表中时,C++ 会隐式地将我的类转换为其基类。显然,该列表可以存储该类的任何子类,因此这是可以接受的,但是我将如何存储该类以便可以访问此特定功能。
我能想到的唯一方法是使用模板,还有其他选择吗?
这是一个例子:
class A
{
A() {}
virtual void function()
{
}
}
class B : public A
{
B() {}
void function()
{
}
}
boost::shared_ptr<B> b = boost::shared_ptr<B>(new b);
std::list<boost::shared_ptr<A> > objects;
objects.push_back(b);
// pull t out of objects
t.function();
编辑:过于简单化了,所以我已经修复了一些东西......
【问题讨论】:
-
我首先将
function设为虚拟。 -
这不是
class A的(副本)列表,而不是class A的指针(或引用)列表吗? IIRC 这应该总是导致切片 -
发布实际编译并包含相关细节的真实(但简短)代码!
-
你的意思是
boost::shared_ptr<B> b = boost::shared_ptr<B>(new B);?
标签: c++ inheritance