我需要设置回调,但我不想让它成为全局函数,我也不需要公开,所以我把它变成了私有的。想知道,这是正确的方法。
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;}
答案 0 :(得分:2)
这很好,因为你只需要在类B中访问具体(私有)函数。类A不关心访问说明符,唯一的契约是必须与函数指针定义匹配的函数签名。
答案 1 :(得分:1)
你的代码很好。它与以下标准惯用语没有什么不同:
class Foo
{
int n;
public:
int & the_int() { return n; }
};
通过公共职能公开私人会员是完全可以的。 (它可能不是一个好的设计,但它完全合法。)你通过使用私有成员作为函数参数来做同样的事情,用于其他一些不相关的目的。请注意,只有您自己的class B
才能访问B
的私有成员。
答案 2 :(得分:0)
首先,您使用set
中未介绍的A
,您想说call
吗?
第二个为什么你应该使用另一个类来调用你自己的类的某个函数(事件public
或private
)?你可以简单地说:
B() { prfn(); }
好的,如果你想实现一个你想要传递给另一个类的回调,并且该类函数不应该由你的类的其他用户直接调用,那么你当然做得对,你的函数应该是私有的!