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

Can I omit the type arguments of smart pointers in my header files?

我正在构建一个 C++ 库。我有一个 struct,其中包含一个 std::unique_ptr 到另一个我想对用户隐藏的 struct

例如:

struct MyStruct {
    int x;
  private:
    std::unique_ptr<MyPrivateStruct> y;
};

现在,我需要在用户可以包含的 header 文件中指定 MyStruct,以便他们了解其布局。但是,这需要我还公开 MyPrivateStruct 的 header,我不想这样做。由于 unique_ptr 的大小无论类型如何都是相同的,是否可以这样做?

struct MyStruct {
    int x;
  private:
    std::unique_ptr<auto> y;
};

y 的类型将由我的 cpp 文件决定。


这与 完全 不是同一个问题,因为这个问题的答案是使用前向声明。这个问题是关于使用前向声明时的问题。

当然可以!

struct MyPrivateStruct;

struct MyStruct {
    int x;
  private:
    std::unique_ptr<MyPrivateStruct> y;
};
std::unique_ptr<MyPrivateStruct> y; 中的

MyPrivateStruct 不必是 完整类型 .

即可以写

转发声明

struct MyPrivateStruct;

y 声明之前。