我在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
}
谢谢。
为什么不将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);