相关疑难解决方法(0)

C中函数指针的递归声明

我想声明一个返回指向同一类型函数的指针的函数.

我想用它来实现如下所示的状态机:

typedef event_handler_t (*event_handler_t)(event_t*); // compilation error

event_handler_t state2(event_t* e);
event_handler_t state1(event_t* e) {
    switch(e->type) {
    //...
    case SOME_EVENT:
        return state2;
    //...
    }

}
event_handler_t state2(event_t* e) {
    switch(e->type) {
    //...
    case OTHER_EVENT:
        return state1;
    //...
    }   
}

//...
event_handler_t event_handler;
//...
event_handler(&e);
//...
Run Code Online (Sandbox Code Playgroud)

我设法使用如下结构解决compliation错误:

typedef struct event_handler {
    struct event_handler (*func)(event_t *);
} event_handler_t;
Run Code Online (Sandbox Code Playgroud)

但这会使返回声明更加复杂:

event_handler_t state2(event_t* e) {
{
    event_handler_t next_handler = {NULL};
    switch(e->type) {
    //...
    case OTHER_EVENT:
        next_handler.func = state1;
        break;
    //...
    } 
    return next_handler;
} …
Run Code Online (Sandbox Code Playgroud)

c c89

20
推荐指数
1
解决办法
4181
查看次数

是否可以在C中进行递归类型定义

我想定义一个函数类型,它返回一个指向同一类型函数的指针.我试过这个:

typedef state* (*state)(lex*);
Run Code Online (Sandbox Code Playgroud)

但我得到的syntax error就像你猜的那样.

c syntax types

6
推荐指数
0
解决办法
423
查看次数

C++:如何返回指向非静态成员函数的指针?

我想做这样的事情:

typedef int(A::*f_ptr)(int);
class A
{
    int f1(int a){ /*do something*/ }
    int f2(int a){ /*do something else*/ }
    f_ptr pick_f(int i)
    {
         if(i)
              return this->f1;
         return this->f2;
    }
}
Run Code Online (Sandbox Code Playgroud)

原因是我希望类 A 的实例保存某些有用的变量,然后根据用户输入只选择我需要的成员函数。但这不起作用,因为我得到“指向绑定函数的指针只能用于调用该函数”。如何编写返回指向非静态成员函数的指针的函数?

c++ pointers member-function-pointers

3
推荐指数
1
解决办法
71
查看次数

标签 统计

c ×2

c++ ×1

c89 ×1

member-function-pointers ×1

pointers ×1

syntax ×1

types ×1