1

我需要设置回调,但我不想让它成为全局函数,我也不需要它公开,所以我把它设为私有。想知道,这是正确的方法。

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;}
4

3 回答 3

2

这很好,因为您只需要在 B 类中访问具体(私有)函数。A 类不会关心访问说明符,唯一的约定是必须匹配函数指针定义的函数签名。

于 2012-10-18T17:52:21.557 回答
1

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

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

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

于 2012-10-18T18:00:00.120 回答
0

首先你用set那个没介绍的A你想说call吗?第二为什么你应该使用另一个类来调用你自己类的某些函数(事件public或)?private你可以简单地说:

B() { prfn(); }

好的,如果你想实现一个你想传递给另一个类的回调并且这个函数不应该被你的类的其他用户直接调用,那么你肯定做对了,你的函数应该是私有的!

于 2012-10-18T17:51:13.007 回答