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)
如果我将文件包含在彼此中,编译器会告诉我未在此范围内声明文件.我怎么能避免这个?
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函数原型分开,特定类型的标题只应包含在使用它们的源文件中.
归档时间: |
|
查看次数: |
157 次 |
最近记录: |