<i id='2XJIf'><tr id='2XJIf'><dt id='2XJIf'><q id='2XJIf'><span id='2XJIf'><b id='2XJIf'><form id='2XJIf'><ins id='2XJIf'></ins><ul id='2XJIf'></ul><sub id='2XJIf'></sub></form><legend id='2XJIf'></legend><bdo id='2XJIf'><pre id='2XJIf'><center id='2XJIf'></center></pre></bdo></b><th id='2XJIf'></th></span></q></dt></tr></i><div id='2XJIf'><tfoot id='2XJIf'></tfoot><dl id='2XJIf'><fieldset id='2XJIf'></fieldset></dl></div>
    <legend id='2XJIf'><style id='2XJIf'><dir id='2XJIf'><q id='2XJIf'></q></dir></style></legend>

      <small id='2XJIf'></small><noframes id='2XJIf'>

      • <bdo id='2XJIf'></bdo><ul id='2XJIf'></ul>
    1. <tfoot id='2XJIf'></tfoot>

      访问受限的朋友类

      时间:2023-10-07

      <small id='X9WCs'></small><noframes id='X9WCs'>

      • <bdo id='X9WCs'></bdo><ul id='X9WCs'></ul>

            <i id='X9WCs'><tr id='X9WCs'><dt id='X9WCs'><q id='X9WCs'><span id='X9WCs'><b id='X9WCs'><form id='X9WCs'><ins id='X9WCs'></ins><ul id='X9WCs'></ul><sub id='X9WCs'></sub></form><legend id='X9WCs'></legend><bdo id='X9WCs'><pre id='X9WCs'><center id='X9WCs'></center></pre></bdo></b><th id='X9WCs'></th></span></q></dt></tr></i><div id='X9WCs'><tfoot id='X9WCs'></tfoot><dl id='X9WCs'><fieldset id='X9WCs'></fieldset></dl></div>

                <tbody id='X9WCs'></tbody>

                <legend id='X9WCs'><style id='X9WCs'><dir id='X9WCs'><q id='X9WCs'></q></dir></style></legend>
              1. <tfoot id='X9WCs'></tfoot>

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

                问题描述

                我想让 A 类成为 B 类的朋友类.我想这样做,因为这些交互非常频繁,并且 A 需要更改 B 类的内部结构(我不想使用 public 公开).但我想确保它只能访问少数选定的功能,而不是所有功能.

                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.

                示例:

                class A
                {
                };
                
                class B
                {
                private:
                 void setState();
                void setFlags();
                friend class A
                };
                

                我希望 A 能够访问 setState 但不能访问 setFlags...是否有设计模式或一种很好的方法来做到这一点,或者在这种情况下我是否可以提供完全访问权限或根本没有访问权限.

                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.

                谢谢

                推荐答案

                这取决于您所说的一种不错的方式"是什么意思:) 在 comp.lang.c++.moderated 之前,我们遇到了同样的问题.你可能会看到它产生的讨论 那里.

                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,我们最终使用了嵌套键的朋友"方法.应用于您的示例,这将产生:

                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();
                };
                

                这个想法是公共 setFlags() 必须用Key"调用,只有 Key 的朋友才能创建一个,因为它的 ctor 是私有的.

                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.

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

                上一篇:boost::asio 和活动对象 下一篇:在 DLL 中分配内存并将指向它的指针指向客户端应

                相关文章

                最新文章

                  1. <i id='WKoVw'><tr id='WKoVw'><dt id='WKoVw'><q id='WKoVw'><span id='WKoVw'><b id='WKoVw'><form id='WKoVw'><ins id='WKoVw'></ins><ul id='WKoVw'></ul><sub id='WKoVw'></sub></form><legend id='WKoVw'></legend><bdo id='WKoVw'><pre id='WKoVw'><center id='WKoVw'></center></pre></bdo></b><th id='WKoVw'></th></span></q></dt></tr></i><div id='WKoVw'><tfoot id='WKoVw'></tfoot><dl id='WKoVw'><fieldset id='WKoVw'></fieldset></dl></div>

                    <small id='WKoVw'></small><noframes id='WKoVw'>

                  2. <legend id='WKoVw'><style id='WKoVw'><dir id='WKoVw'><q id='WKoVw'></q></dir></style></legend>
                      <bdo id='WKoVw'></bdo><ul id='WKoVw'></ul>

                    <tfoot id='WKoVw'></tfoot>