朋友类有限的访问 [英] friend class with limited access

查看:115
本文介绍了朋友类有限的访问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个类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.

这篇关于朋友类有限的访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆