gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:03:04 30 4
gpt4 key购买 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 移动到 include 的情况下将 private_class_decl.h 公开到我的 public_class_decl.h 声明/mylb/?

最佳答案

您可以在公共(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
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com