我可以在 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
声明之前。
我正在构建一个 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
声明之前。