データを逆シリアル化するためのライブラリを作成しています。次のような構造体定義があります。
#ifndef SEARCHRESULTS_H
#define SEARCHRESULTS_H
typedef struct {
char *url;
} SearchResult;
typedef struct {
int count;
SearchResult *searchResults;
} SearchResults;
#endif
C にはリフレクションがないため、すべての関数を手動で作成する必要がありますが、ヘッダーを解析し、struct
名前とフィールドを見つけ、関数を生成するための優れた方法があるはずです (疑似 C):
#include "SearchResults.h"
#include "pdata_serialization.h"
void SearchResult_parse(pdata *data, SearchResult *obj) {
obj->url = strdup(data->values["url"]);
}
void SearchResult_free(SearchResult *obj) {
free(obj->url);
free(obj);
}
void SearchResults_parse(pdata *data, SearchResults *obj) {
obj->count = data->values["count"];
obj->searchResults = malloc(sizeof(SearchResult) * obj->count);
for (int i = 0; i < obj->count; i++)
SearchResult_parse(data->values["searchResults"][i], &obj->searchResults[i]);
}
void SearchResults_free(SearchResults *obj) {
for (int i = 0; i < obj->count; i++)
SearchResult_free(&obj->searchResults[i]);
free(obj);
}
私は完全な解決策を探しているわけではありませんが、正気で最小限のアイデアと小さな例を探しています。