代码之家  ›  专栏  ›  技术社区  ›  Austin Hanson

C++:指向非关联结构中类成员函数的指针

  •  2
  • Austin Hanson  · 技术社区  · 15 年前

    我已经在网上做了一些关于如何去做这个的阅读,我认为我做的是正确的…我的目标是拥有一个结构对象数组,其中包含指向类成员函数的指针。

    这是我到目前为止所拥有的…

    typedef void (foo::*HandlerPtr)(...);
    class foo
    {
    public:
        void someFunc(...);
        // ...
    private:
        // ...
    };
    
    struct STRUCT
    {
        HandlerPtr handler;
    };
    
    STRUCT stuff[]
    {
        {&foo::someFunc}
    };
    

    然后,当使用(stuff[0].*handler)()调用函数时,无论是否有参数(我实际上打算使用参数列表),我都会得到“handler”:未声明的标识符…

    我一定错过了什么,只是不知道是什么。

    1 回复  |  直到 15 年前
        1
  •  8
  •   Remy Lebeau    15 年前

    somefunc()不是静态方法,因此需要一个foo对象实例,以便通过指向方法变量的指针调用somefunc(),即:

    foo f;
    f.*(stuff[0].handler)();
    

    或:

    foo f;
    HandlerPtr mthd = stuff[0].handler;
    f.*mthd();
    

    或者,使用指针:

    foo *f = new foo;
    f->*(stuff[0].handler)();
    delete f;
    

    或:

    foo *f = new foo;
    HandlerPtr mthd = stuff[0].handler;
    f->*mthd();
    delete f;