繁体   English   中英

在c ++中只有静态成员函数的朋友类作为朋友模块?

[英]Friend class with only static member functions as a friend module in c++?

我有一个类(比如MyClass)和将MyClass实例作为参数的函数。 这些函数需要访问MyClass的私有成员。 成员是私有的,因为MyClass的用户不需要了解成员。 但是,我不想让函数成为MyClass的成员,因为函数应该将几个MyClass实例作为参数,并且对称地处理争论。 我不想特意处理“这个”对象。

如果有一种模块系统,所以我可以声明一个包含MyClass的朋友的功能的模块,我会很高兴。 但是C ++中没有这样的东西。 一种方法是创建一个友元类,并使函数成为类的静态成员。 但是,许多人不推荐这种方式(例如, 名称空间+函数与类上的静态方法 ),因为类不适用于此类用途。

这种情况的任何设计解决方案?

namespace是当前相关的功能。 但是不可能获得朋友命名空间,不再可以模板化命名空间或将命名空间作为模板参数传递,两种常见的情况是只有静态成员的struct通常用作解决方法。 因此,使用结构有一个很好的先例。 使用静态成员结构而不是命名空间至少还有另一个原因:当结构关闭时,命名空间可以添加。 而这个方面本身也可能是为朋友使用结构而不是命名空间的理由。

您通常会实现作为目标类成员的独立函数等函数。 你可以在课堂上“逐字”地实现它们,但它们仍然是独立的。 因此,当您将所有这些功能列为朋友并实施时,您不需要重复自己:

class MyClass {
    int x;

    friend void doSomething(MyClass & obj) {
        obj.x++;
    }
    friend bool doSomethingDifferent(MyClass & a, MyClass & b) {
        return a.x < b.x;
    }
};

朋友不必上课。 您可以将函数声明为朋友。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM