0

我有这个定义结构的代码(传入的是简单结构)

#define FUNCS_ARRAY 3

    struct func
    {
        void (AA::*f) (incoming *);
        int arg_length;
    };

    func funcs[FUNCS_ARRAY];

然后在 AA 类主体中,我像这样定义指针数组:

funcs[0] = { &AA::func1, 4 };
funcs[1] = { &AA::func2, 10 };
funcs[2] = { &AA::func2, 4 };

当我尝试通过数组调用其中一个函数时,我得到编译错误:
如果我这样调用它(p 传入):

(*funcs[p->req]->*f)(p);  

我收到此错误:

error: no match for ‘operator*’ in ‘*((AA*)this)->AA::funcs[((int)p->AA::incoming::req)]’

当我尝试这样称呼它时:
(funcs[p->req]->*f)(p);
我越来越 :

error: ‘f’ was not declared in this scope

当我尝试这个时:

   (funcs[p->req].f)(p);

error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘((AA*)this)->AA::funcs[((int)p->AA::incoming::req)].AA::func::f (...)’, e.g. ‘(... ->* ((AA*)this)->AA::funcs[((int)p->AA::incoming::req)].AA::func::f) (...)’

访问 struct 中的函数指针的正确方法是什么?

4

1 回答 1

3

要通过指向成员函数的指针调用成员函数,您需要该指针和相应类的实例。

在您的情况下,指向成员的指针是funcs[i].f,我假设您有一个AA被调用的实例aa。然后你可以像这样调用那个函数:

(aa.*(funcs[p->req].f))(p);

如果aa是指向 AA 的指针,则语法为:

(aa->*(funcs[p->req].f))(p);

如果您从 的(非静态)成员函数中调用AA,请尝试:

(this->*(funcs[p->req].f))(p);
于 2012-07-21T14:35:54.530 回答