是否有使用友元类隐藏私有函数的习语名称?
如果一个类有很多私有函数,在头文件中声明它们似乎是不可取的。它使客户端更难解析类的接口并增加编译时间。
当然,一种选择是 pimpl 惯用法,但这会增加一层间接性并导致内存分配。
下面是在实现文件中定义的友元类中隐藏辅助函数的示例。
这个成语有名字吗?
有什么理由不这样做吗?
//Foo.h
class Foo
{
public:
void FuncA();
void FuncB();
private:
int x;
// more data...
friend struct FooHelpers;
};
//Foo.cpp
struct FooHelpers
{
static void Helper1(Foo& f)
{
// manipulate private data..
f.x++; //etc.
}
// Possibly more funcs...
};
void Foo::FuncA()
{
//....
FooHelpers::Helper1(*this);
//....
}
//....