投射物体

时间:2012-04-29 11:07:27

标签: c++ casting return

在我的代码中,我有点像:

class A
{
 enum eType
 {
  A=0,
  B,
  C
 };
 virtual eType ReturnType()
 {
  return A;
 }
};

class B : A
{
 eType ReturnType()
 {
  return B;
 }
}

class C : A
{
 eType ReturnType()
 {
  return C;
 }
}

我的MFC CList上有很多对象B和C类。我怎么写这样的方法

auto GetObjectFromList
{
 return object;
}

返回适当的对象。我的意思是当列表上的对象是B类时,这个方法应该用B类的方法返回对象类B,当它是对象类C时,这个方法应该用C类方法返回对象类C?我尝试使用C ++ 11中的auto,但我做不到。

2 个答案:

答案 0 :(得分:1)

我认为你的意思是“B级:公众A”吧?

std::auto_ptr<A> GetObjectFromList()
{
    return std::auto_ptr<A>( new B ) ;  // you can new C if you want to return a C
}

答案 1 :(得分:0)

首先,你说你有一个B和C的集合。如果你没有A类的实例,可以通过

使它成为纯虚拟的

虚拟eType ReturnType()= 0;

其次,您需要通过以下方式进行继承:

A类:公开 B

然后,对于这个问题,您需要使用dynamic_cast&lt;&gt;查看您要查找的索引中存储的实例。