Одним из вариантов является использование составных типов и явное сопоставление элементов структуры с основными типами, поддерживаемыми HDF.
Единственное осложнение, которое я обнаружил при подходе, было со списками и последовательностями. Один из вариантов - сохранить элементы списка в другом наборе данных, а затем сослаться на начальный и конечный индексы.
Для случаев, когда данные не являются смежными или более сложными, один из подходов заключается в использовании конструкции типа связанного списка. Так что для следующего:
class A {
int i;
vector<int> b;
}
Это сопоставлено с:
ADataset => { i, b_index };
BDataset => { value, next_index };
Записи в 'ADataset' хранят 'b_index'. Каждая запись в «BDataset» содержит значение для этой записи, а затем необязательный next_index. Для того, чтобы «next_index» знал, когда нужно остановиться, можно использовать значение часового.