C中的自动函数指针

问题描述 投票:-1回答:1

我在C中有这个问题。比方说,我有这样的结构:

struct Writer {
    char buffer[10];
    void (*writeFunction)(uint8_t*, size_t);
}

此结构具有使用用户给定的writer函数指针来转储值的方法,如下所示:

struct Writer writer;
FILE* file = fopen("test.txt", "wb");
void writeToFile(uint8_t* content, size_t size)
{
    fwrite(content, 1, size, file);
}
write.writeFunction = writeToFile;

当用户编写写函数并手动传递它们时,此方法很好用。但是,有没有一种方法可以自动执行此操作,因此我可以说,对于每个新的Writer结构,都将生成一个具有from-user-given-filepath的新writeFunction指针。我尝试过,但是我还是继续使用C ++ lambda函数或需要C ++的this指针。

预期为:

void generate(struct Writer* writer, const char* filename)
{
    // somehow, writer->writerfunction needs to point to a 
writeToFile function like above 
}

谢谢。

c pointers function-pointers
1个回答
0
投票

为什么不将FILE *存储为writer结构的成员并将其传递给writer函数?

struct Writer {
    char buffer[10];
    FILE *file;
    void (*writeFunction)(FILE *, uint8_t*, size_t);
}

void writeToFile(FILE *file, uint8_t* content, size_t size)
{
    fwrite(content, 1, size, file);
}

并且生成函数变为。

void generate(struct Writer* writer, const char* filename)
{
   FILE* file = fopen(filename, "wb");
   writer->writeFunction = writeToFile;
   writer->file = file;
}

使用函数指针调用函数时,

   (*writer->writeFunction)(writer->file, writer->buffer, somesize);
© www.soinside.com 2019 - 2024. All rights reserved.