break Protected member access解决方法

break Protected member access
C/C++ code
#include "stdafx.h"


// Library code
template<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)() = &amp;accessor::do_foo; //获得父类do_foo的函数地址?????
return (derived.*fn)(); //获得地址后,然后用derived这个对象来调用


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

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