我正在构建一个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相同的问题,因为这个问题的答案是使用前向声明。这个问题是关于使用前向声明时的问题。
答案 0 :(得分:4)
当然!
struct MyPrivateStruct;
struct MyStruct {
int x;
private:
std::unique_ptr<MyPrivateStruct> y;
};
答案 1 :(得分:2)
MyPrivateStruct
中的 std::unique_ptr<MyPrivateStruct> y;
不一定是完整类型。
也就是说,您可以通过编写
来声明它 struct MyPrivateStruct;
在声明y
。