问题描述
我想创建一个类A类B的朋友类。我想这样做,因为这些交互非常多,A需要更改类B的内部(我不想公开使用公共)。
例如:
pre> class A
{
};
class B
{
private:
void setState();
void setFlags();
friend class A
};
我想A能够访问setState但不能setFlags ...有一个设计模式
感谢
这取决于你的意思是一个很好的方式:)在comp.lang.c ++。moderated我们有同样的问题一个时间前。您可以看到它生成的讨论。
IIRC,我们最终使用嵌套键的朋友方法。应用于您的示例,这将产生:
类A
{
}
class B
{
public:
class Key {
friend class A;
Key();
};
void setFlags(Key){setFlags();}
private:
void setState();
void setFlags();
};
想法是public setFlags()必须用Key调用,的Key可以创建一个,因为它的ctor是私有的。
I want to make a class A friend class of class B. I want to do this as these interact very much and A needs to change internals of class B (which I dont want to expose using public). But I want to make sure it has access to only a few selected functions not all the functions.
Example:
class A
{
};
class B
{
private:
void setState();
void setFlags();
friend class A
};
I want A to be able to access setState but not setFlags... Is there a design pattern or a nice way of doing this or am I left with giving full access or no access at all in this case.
Thanks
It depends on what you mean by "a nice way" :) At comp.lang.c++.moderated we had the same question a while ago. You may see the discussion it generated there.
IIRC, we ended up using the "friend of a nested key" approach. Applied to your example, this would yield:
class A
{
};
class B
{
public:
class Key{
friend class A;
Key();
};
void setFlags(Key){setFlags();}
private:
void setState();
void setFlags();
};
The idea is that the public setFlags() must be called with a "Key", and only friends of Key can create one, as its ctor is private.
这篇关于朋友类有限的访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!