c++ - 避免在类头文件中声明私有(private)函数 (C++)

标签 c++ function header private declare

(在 C++ 中)我有一个类,其结构在头文件中声明。该头文件包含在很多源文件中,因此当我编辑它时,我需要重新编译很多文件。

该类具有一组仅在一个源文件中调用的私有(private)函数。目前它们在头文件的类结构中声明。当我添加这种类型的新函数或编辑参数时,它会导致重新编译大量文件。我想在其他地方声明这些函数,这样只有定义和调用它们的文件被重新编译(以节省时间)。不过,它们仍然需要能够访问内部类变量。

我怎样才能做到这一点?

最佳答案

使用 pImpl idiom - 你的可见类保留一个指向 real 类的指针并将调用转发到公共(public)成员函数。

编辑:回应评论

// Foo.h:

class FooImpl; // Do *not* include FooImpl.h
class Foo {
public:
  Foo();
  ~Foo();
  //.. also need copy ctor and op=
  int bar();
private:
  FooImpl * Impl;
};

// FooImpl.h:

class FooImpl {
public:
  int bar() { return Bar; }
private:
  int Bar;
};

// Foo.cpp:

#include "FooImpl.h"

Foo::Foo() { Impl = new FooImpl(); }
Foo::~Foo() { delete Impl; }
int Foo::bar() { return Impl->bar(); }

FooImpl 中保留你的类的实际实现 - Foo 应该有 FooImplpublic 成员的拷贝> 并简单地将调用转发给这些。所有用户将仅包含“Foo.h” - 您可以更改 FooImpl 的所有私有(private)详细信息,而 Foo 的用户不会看到任何更改。

关于c++ - 避免在类头文件中声明私有(private)函数 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5665471/

相关文章:

C++ 绑定(bind)返回类型模板参数

networking - Kotlin 中的 Okhttp3,String.mediaType() 不起作用

c++ - 使用 std::move 与使用指向线程的指针相比是否有性能成本?

c++ - 使用多个 slider 在自定义 QWidget 中映射 QSlider::valueChanged 信号

c++ - Qt 列出类的属性

bash - 进入目录后执行bash函数

用户必须进行交互的javascript函数,添加似乎不起作用

html - css 更有效率?更改箭头和标题的颜色

wordpress - 有没有一种方法可以在二十七个模板的标题中添加youtube播放列表而不是youtube视频?

c++ - 抑制非平凡无用的警告 "control may reach end of non-void function"