我需要确保声明为某个 C++ 类的朋友的 C++ 函数具有内部链接。
我需要该函数成为朋友的原因是因为它需要访问该类的私有成员,该私有成员缓存函数的结果。
函数需要是同一个类的非成员(或至少不是实例成员)的原因是因为其他代码需要能够获取指向它的非成员函数指针。重构这将太昂贵。
我需要它具有内部链接的原因是因为会有很多这些函数,并且在 AIX 上,它们太多会导致链接时 TOC 溢出错误。这可以使用-bbigtoc
链接器开关来克服,但我暂时试图避免这种情况。
另外,我真的希望能够将类声明保留在头文件中,但将函数本身放在包含实现的 .cxx 文件中。
总结一下,现在我有这样的事情:
class Foo
{
private:
mutable Qux cachedBarResult;
// ... more code here ...
public:
friend const Qux & Bar(const Foo &);
};
const Qux & Bar(const Foo & foo)
{
if (foo.cachedBarResult.isEmpty())
{
foo.cachedBarResult = _worker_Bar(foo);
}
return foo.cachedBarResult;
}
static Qux _worker_Bar(const Foo & foo)
{
// real Bar work
}
我想建立Bar
内部联系。可以这样做吗?