c ++返回类型具有当前类类型的指针

时间:2015-08-11 15:32:48

标签: c++ class struct types definition

对于错误的问题表达表示抱歉,找不到更好的方法来简要描述我的问题:

我有一个带有纯虚方法的A类,它返回一个B类型的对象。 B类有一个成员变量,它是指向A类对象的指针。 有没有办法实现这个目标?

示例:

class A {
public:
  B mymethod() const = 0;
}

struct B {
  std::shared_ptr<A> mypointer;
}

如果我将文件包含在彼此中,编译器会告诉我在此范围内未声明文件。我怎么能避免这个?

1 个答案:

答案 0 :(得分:5)

std::shared_ptr旨在替换原始指针 - 因此,为了提供兼容的语义,它也可以在没有完整类型定义的情况下使用。

  

实施说明

     

在典型的实现中,std::shared_ptr只包含两个指针:

     
      
  • 存储的指针(由get()返回的指针)
  •   
  • 指向控制块的指针
  •   

所以,前向声明就足够了:

<强> A.H

#include "B.h"

class A
{
public:
  B mymethod() const = 0; //returns by value, so full definition of B is required (*)
};

<强> B.h

class A; //Forward declare A

struct B
{
  std::shared_ptr<A> mypointer;
};

(*)事实上,在您的情况下,可能不需要此类包含,因为它只是返回B的函数的声明。只要您将声明(.h)和实际正文(.cpp)或简单地 forward-declare 函数原型分开,特定类型的标题应仅包含在源文件中,使用它们。