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

Byo*_*eer 3 c++ struct types class definition

对于糟糕的问题表述感到抱歉,找不到更好的方法来简要描述我的问题:

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

例:

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

struct B {
  std::shared_ptr<A> mypointer;
}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*jek 5

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

实施说明

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

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

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

:

#include "B.h"

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

Bh:

class A; //Forward declare A

struct B
{
  std::shared_ptr<A> mypointer;
};
Run Code Online (Sandbox Code Playgroud)

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