C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 将名称空间声明为类的朋友大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否有一种方法,使我们在一个特定的命名空间的朋友中定义一个类的所有功能

特别是,我有一个类,例如:

class C {
    private:
        // ...
    public:
        // ...

        friend C* B::f1(C*);
        friend C* B::f2(C*);
        friend C* B::f3(C*);
        friend C* B::f4(C*);
        friend C* B::f5(C*);
};

一个命名空间B为:

namespace B {
    C* f1(C* X);
    C* f2(C* X);
    C* f3(C* X);
    C* f4(C* X);
    C* f5(C* X);
};

现在,我宁愿避免在类定义中写入5行,使命名空间B的所有五个函数都与C类通信,并告诉编译器,命名空间B中定义的所有函数都是类C的朋友(即可以访问其私人成员).

一个快速的修复我想是将命名空间更改为一个类,并将这些函数定义为其静态成员,然后将类B声明为类C的朋友.但是,出于好奇,我想知道这样的事情是否可以使用命名空间好吗?

提前致谢.

解决方法

不,这不是一个命名空间.如果没有别的,它将构成“安全漏洞”,因为命名空间可以在任何地方扩展.所以任何人都可以向命名空间添加任意函数,并访问该类的非公开数据.

你最接近的是你提出的解决方案,使这些功能成为一个类的静态成员,并且与类相交.但是再一次,为什么不把它们变成原来的静态成员(你的代码中的C)呢?

除此之外,如果我在代码中遇到了这么多朋友的功能,那么会让我再想想我的设计,我会把它作为一个迹象,我在做错事.

大佬总结

以上是大佬教程为你收集整理的c – 将名称空间声明为类的朋友全部内容,希望文章能够帮你解决c – 将名称空间声明为类的朋友所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。