C++ 存储类列表并通过在C+中进行子分类来专门化函数+;?

C++ 存储类列表并通过在C+中进行子分类来专门化函数+;?,c++,inheritance,C++,Inheritance,我试图用我想要的特定函数如何执行的专门化来对一个类进行子类化。但是C++在我把它存储到一个列表时隐式地将我的类转换为它的基类。很明显,这个列表可以存储这个类的任何子类,所以这是可以接受的,但是我如何存储这个类,以便访问这个特定的函数呢 我能想到的唯一方法就是使用模板,还有其他选择吗 以下是一个例子: class A { A() {} virtual void function() { } } class B : public A { B() {}

我试图用我想要的特定函数如何执行的专门化来对一个类进行子类化。但是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();
A类
{
A(){}
虚空函数()
{
}
}
B类:公共A
{
B(){}
空函数()
{
}
}
boost::shared_ptr b=boost::shared_ptr(新b);
std::列出对象;
物体。推回(b);
//将t从对象中拉出
t、 函数();

编辑:这太简单了,所以我修正了一些问题…

如果需要多态性,
函数必须是
虚拟的

class A
{
    A() {}
    virtual void function()
    {
    }
}

这是一种叫做切片的现象。答案是存储一个指针容器,例如有助于此过程的
std::list。

正如其他人建议的那样,函数应该是虚拟的。要将其存储在列表中,您需要将其存储为指针(原始指针或使用boost包装器)。因此,当您使用指针调用函数时,多态性出现在图片中,并执行正确的函数。

我首先要将
函数设置为虚拟。这不是一个
的(副本)列表,而不是指向
的指针(或引用)列表吗?IIRC这应该总是导致实际编译并包含相关细节的slicingPost real(但很短)代码!你的意思是
boost::shared_ptr b=boost::shared_ptr(新b)