如何在C中从其他3个具有相同签名的函数创建函数

时间:2020-10-24 17:39:35

标签: c function pointers

我正在使用C,并且我正在尝试通过将2个具有相同签名的函数,第三个具有几乎相同签名但仅少一个参数的函数连接起来,构建一种“复合”函数。函数应按顺序执行,但最终函数必须具有相同的签名。您可以认为它是使用具有相同签名的代码块构建函数(我已经在C ++中通过策略类实现了该功能,但是我正在尝试一种C方法,因为其余的代码已经在C中了。)

为了解释我的方法,我构建了一些非常简单的代码。

#include <stdio.h>
#include <stdlib.h>

typedef void simulFileProc(int a, int b);
typedef void simulRead(int a);
typedef struct compFunct{
    simulFileProc* file1;
    simulRead* read;
    simulFileProc* file2;
} compFunct;

void realProc(int a, int b){
    printf("call from realProc %d, %d\n",a,b);
}

void realRead(int a){
    printf("call from read %d\n",a);
}

simulFileProc* join(int a, int b, compFunct* func){
    
    void sf(int a, int b){
        func->file1(a,b);
        printf("intermediate line\n");
        func->read(a);
        func->file2(a,b);
    } 
    return &sf;
}

int main() {
    
    compFunct* c = malloc(sizeof(256));
    c->file1 = &realProc;
    c->read = &realRead;
    c->file2 = &realProc;
    int a=0;
    int b=0;
    
simulFileProc* s = join(a,b,c);
s(4,3);
    
    return 0;
}

它正在工作,但是由于某种原因,仅打印了第一个功能。

call from realProc 4, 3
intermediate line

如果我在“ func-> read(a);”行中添加注释,则表示存在细分错误。

怎么了?有更聪明的方法吗?

0 个答案:

没有答案
相关问题