通过C++中的子类存储类列表和专门化函数?

Dan*_*Dan 0 c++ inheritance

我正在尝试使用我想要执行特定函数的特化来对类进行子类化.但是,当我将它存储在列表中时,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)

编辑:过度简化了这一点,所以我修了几件事......

rlb*_*ond 8

这是一种称为切片的现象.答案是存储一个指针容器,例如std::list<A*>.记得在完成后删除所有内容.

如果你可以使用Boost库,那么有一个很棒的库叫做Pointer Container,可以帮助你完成这个过程.