嗨,我有一个关于 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);
}
我不太明白为什么第二个例子会起作用。唯一的区别是它有一个辅助函数。对于这两个示例,Test::func 都在奇怪的函数中调用,它不是类 Test 的成员。我想有一些关于使用成员函数指针存储的权限的信息。有人会确认(或否认)这一点并解释一下背后的原因吗?
谢谢,迪