您好我对c ++成员函数的权限有疑问。
示例1
class Test {
private:
void func() { cout << "test" << endl; }
};
void weird_func(Test* t, void (Test::*f)()) {
(t->*f)();
}
int main() {
Test t;
weird_func(&t, &Test::func);
}
这不起作用
test1.cc: In function ‘int main()’:
test1.cc:10:10: error: ‘void Test::func()’ is private
test1.cc:19:26: error: within this context
然而,另一个例子有效
class Test {
public:
void helper(Test* ptr);
private:
void func() { cout << "test" << endl; }
};
void weird_func(Test* t, void (Test::*f)()) {
(t->*f)();
}
void Test::helper(Test* ptr) {
weird_func(ptr, &Test::func);
}
int main() {
Test t;
t.helper(&t);
}
我不太明白为什么第二个例子会起作用。唯一的区别是它有一个辅助函数。对于两个示例,在weird_func中调用Test :: func,这不是Test类的成员。我想有一些关于使用成员函数指针存储的权限的信息。有人会确认(或否认)这个并解释一下引擎盖下的原因吗?
谢谢, 二
答案 0 :(得分:3)
:: helper可以访问私有函数,因此可以解决它,或者在这种情况下将地址传递给另一个函数。一旦将它作为函数指针引用,就可以像使用指向类属性的指针一样传递它。这在坏人手中是危险的:)。