读书人

break Protected member access解决方

发布时间: 2012-05-14 15:24:34 作者: rapoo

break Protected member access

C/C++ code
#include "stdafx.h"// Library codetemplate<class DerivedT>class Base{private:    struct accessor : DerivedT    //DerivedT是派生类,其中成员函数do_foo是个保护函数    {        static int foo(DerivedT& derived)        {            int (DerivedT::*fn)() = &accessor::do_foo;    //获得父类do_foo的函数地址?????             return (derived.*fn)();   //获得地址后,然后用derived这个对象来调用        }    };public:    DerivedT& derived() {        return static_cast<DerivedT&>(*this); }    int foo()    {        return accessor::foo(derived());     }};


以上代码来自网文,破坏访问 保护成员函数的权限吧,我说的不是很准确。获得保护成员函数地址,然后通过函数指针去访问。。。





[解决办法]
探讨
int (DerivedT::*fn)() = &accessor::do_foo; //获得父类do_foo的函数地址?????
return (derived.*fn)(); //获得地址后,然后用derived这个对象来调用


还有个问题, 看到了吗???? accessor::do_fool 这里,

没有对象,直接对一个类的函数进行取地址,,合适吗?????
……

读书人网 >C++

热点推荐