(在 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
应该有 FooImpl
的 public 成员的拷贝> 并简单地将调用转发给这些。所有用户将仅包含“Foo.h” - 您可以更改 FooImpl
的所有私有(private)详细信息,而 Foo
的用户不会看到任何更改。
关于c++ - 避免在类头文件中声明私有(private)函数 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5665471/