【发布时间】:2016-11-23 23:26:59
【问题描述】:
我正在构建一个 C++ 库。我有一个struct,其中包含一个std::unique_ptr 到另一个struct,我想对用户隐藏。
例如:
struct MyStruct {
int x;
private:
std::unique_ptr<MyPrivateStruct> y;
};
现在,我需要在用户可以包含的头文件中指定MyStruct,以便他们知道其布局。但是,这要求我还公开 MyPrivateStruct 的标头,我不想这样做。由于 unique_ptr 的大小无论类型如何都是相同的,是否有可能做这样的事情?
struct MyStruct {
int x;
private:
std::unique_ptr<auto> y;
};
y 的类型将由我的cpp 文件确定。
这与Can't use std::unique_ptr<T> with T being a forward declaration 的问题完全不同,因为这个问题的答案是使用前向声明。这个问题是关于使用前向声明时的问题。
【问题讨论】:
-
只是转发声明结构?还是您想避免这样做?
-
@LogicStuff 不完全;见编辑。
-
您不需要公开
MyPrivateStruct的标头。你需要转发声明它,就是一行:struct MyPrivateStruct;客户端不需要知道它在头文件中的定义。
标签: c++ package header-files