gpt4 book ai didi

c - C 中的自动函数指针

转载 作者:行者123 更新时间:2023-11-30 20:29:11 28 4
gpt4 key购买 nike

我在 C 中遇到了这个问题。比方说,我有一个像这样的结构:

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

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

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
}

谢谢。

最佳答案

为什么不将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);

关于c - C 中的自动函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58812459/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com