sách gpt4 ai đã đi

c++ - 内部/外部标题分离

In lại 作者:行者123 更新时间:2023-11-28 02:03:04 30 4
mua khóa gpt4 Nike

我构建了一个布局如下的库:

lib/
private_class_impl.cc
private_class_decl.h
public_class_impl.cc
include/mylib/
public_class_decl.h

我的公共(public)类需要有一个指向私有(private)类的私有(private)指针。

有什么方法可以在不将 private_class_decl.h Di chuyển đến include 的情况下将 private_class_decl.h 公开到我的 public_class_decl.h 声明/mylb/?

1 Câu trả lời

您可以在公共(public) header 中转发声明私有(private)类(它不会暴露其接口(interface)或公共(public)成员)。

在 public_class_decl.h 中

struct private_class;
class public_class {
private_class *m_private;
/* ... */
};

在 public_class_impl.cpp 中

#include "public_class_decl.h"
#include "private_class_decl.h"

public_class::foo() {
// private_class interface is known since we can include
// "private_class_decl.h" here...
m_private->method_of_private_class();
}

这个技巧之所以有效,是因为 public_class 使用了一个指向 private_class 的指针,即使我们只提供了前向声明,它也是一个完整的类型。您不能像下面这样按值使用 private_class:

struct private_class;
class public_class {
private_class m_private;
/* ... */
};

这会导致错误:error: field 'm_member' has incomplete type 'private_class'

关于c++ - 内部/外部标题分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38638197/

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com