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 对于特定类型,应该只包含在使用它们的源文件中。
很抱歉问题提法不好,找不到更好的方法来简短描述我的问题:
我有一个 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 对于特定类型,应该只包含在使用它们的源文件中。