我需要确保声明为某个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
}
Run Code Online (Sandbox Code Playgroud)
我想做Bar内部联系.可以这样做吗?
是的,你必须在你说它是朋友之前声明静态函数的原型.
class Foo;
static const Qux & Bar(const Foo & foo);
class Foo
{
private:
mutable Qux cachedBarResult;
// ... more code here ...
public:
friend const Qux & Bar(const Foo &);
};
static const Qux & Bar(const Foo & foo)
{
if (foo.cachedBarResult.isEmpty())
{
foo.cachedBarResult = _worker_Bar(foo);
}
return foo.cachedBarResult;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |