我正在写一个包装在名为namespace
的{{1}}中的类。我正在使用其函数之一为cs
的库。该函数必须修改该类的某些受保护成员,因此我在相同的function pointer
命名空间中编写了一个自由函数,并将其设为该类的cs
。这样做使客户端可以使用该功能。但是由于明显的原因,该功能必须不能从客户端访问。
示例代码在这里:
friend function
答案 0 :(得分:3)
如果要使自由功能无法在另一个编译单元中访问,则可以使用嵌套的anonymous namespace:
namespace cs{
class A
{
protected:
//...
friend int myFunc(int valInt, float valFloat);
public:
void abc();
};
namespace { // anonymous nested namespace
int myFunc(int x, float y){
...
}
}
void A:: abc() {
libFunc(this, myFunc);
}
}