c – 将名称空间声明为类的朋友

前端之家收集整理的这篇文章主要介绍了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)呢?

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

原文链接:https://www.f2er.com/c/115783.html

猜你在找的C&C++相关文章