c++ return 类型具有当前类型为 class 的指针

c++ return type has pointer with type of current class

很抱歉问题提法不好,找不到更好的方法来简短描述我的问题:

我有一个 class A 和一个纯虚方法 returns 一个 B 类型的对象。 Class B 有一个成员变量,它是指向 class A 的对象的指针。 有办法实现吗?

示例:

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

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

如果我将文件相互包含,编译器会告诉我其中一个文件未在此范围内声明。我怎样才能避免这种情况?

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

Implementation notes

In a typical implementation, std::shared_ptr holds only two pointers:

  • the stored pointer (one returned by get())
  • a pointer to control block

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

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) 和实际 body (.cpp) 或简单地 forward-declare 函数原型分开,headers 对于特定类型,应该只包含在使用它们的源文件中。