1

嗨,我有一个关于 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 的成员。我想有一些关于使用成员函数指针存储的权限的信息。有人会确认(或否认)这一点并解释一下背后的原因吗?

谢谢,迪

4

1 回答 1

3

::helper 可以访问私有函数,因此可以对其进行寻址,或者在这种情况下将地址传递给另一个函数。一旦它被作为函数指针引用,它就可以像使用指向类属性的指针一样被传递。在坏人手中很危险:)。

于 2013-07-21T05:24:43.183 回答