Я хотел бы напечатать информацию, хранящуюся в памяти, на которую указывает указатель void*
.
Но информация о типе недоступна для типа компиляции.
Вместо этого строкаопределения типа будут доступны во время выполнения.Есть ли способ привести указатель к соответствующему типу во время выполнения так, чтобы к данным, хранящимся в памяти, указанной указателем, можно было получить доступ?
Я думаю, что это должно быть возможно, поскольку отладчик может получить доступ к rawуказатели в процессе отладки и используют отладочную информацию (скажем, в формате DWARF), прикрепленную к исполняемому файлу, для печати понятной человеку информации.Я просто не знаю, как это делается в коде.
Может кто-нибудь дать мне знать, кто это делает?Спасибо.
РЕДАКТИРОВАТЬ.Вот что я хочу сделать в коде.
//definition
void myprint(void *p, const char *struct_def) {
//print the content in p according to struct_def, struct_def can be any valid struct definition in C.
}
//call
myprint(p, "struct s { int n; double d[10]; }");
}
РЕДАКТИРОВАТЬ: определение структуры может не иметь C, оно может быть в другом определяемом пользователем формате, например, LLVM IR или drawf.