我可以在头文件中省略智能指针的类型参数吗?

时间:2016-11-23 15:08:42

标签: c++ package header-files

我正在构建一个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相同的问题,因为这个问题的答案是使用前向声明。这个问题是关于使用前向声明时的问题。

2 个答案:

答案 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

之前