我正在尝试使用我想要执行特定函数的特化来对类进行子类化.但是,当我将它存储在列表中时,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();
Run Code Online (Sandbox Code Playgroud)
编辑:过度简化了这一点,所以我修了几件事......
这是一种称为切片的现象.答案是存储一个指针容器,例如std::list<A*>.记得在完成后删除所有内容.
如果你可以使用Boost库,那么有一个很棒的库叫做Pointer Container,可以帮助你完成这个过程.