类方法在铸造后失去了私人修饰符

Class method loses private modifier after cast

本文关键字:失去 类方法      更新时间:2023-10-16

我需要设置回调,但是我不想使其成为全局功能,我不需要公开它,所以我已经将其私有化了。想知道,这是正确的方法。

class A // button object from window library. I wont change this class
{
public:
    typedef void (*fptr)();
    void set(fptr p)
    {
        p(); // here I call private static of B
    };
};
class B // my own class
{
private:
    static void prfn() {};
public:
    B()
    {
        A a;
        a.set(prfn);
    };
};
int main(){B b;}

这很好,因为您需要仅在B类中访问混凝土(私有)功能。匹配功能指针定义。

您的代码很好。它与以下标准成语没有什么不同:

class Foo
{
    int n;
public:
    int & the_int() { return n; }
};

通过公共功能公开私人会员是完全可以的。(这可能不是一个好的设计,但完全合法。)您正在通过使用私人成员作为其他无关目的的函数参数来做同样的事情。请注意,只有您自己的class B才能访问B的私人成员。

首先,您使用A中未引入的set您想说call吗?第二,为什么您应该使用另一个类来调用自己类的某些功能(事件publicprivate)?您可以简单地说:

B() { prfn(); }

好,如果要实现要将其传递到另一个类的回调,并且该功能不应由类的其他用户直接调用,那么您当然可以做正确的事,并且您的功能应该是私有的!