Soweit ich weiß, können Sie den Spaltennamen nicht in einem atomaren Datentyp festlegen. Wie Sie gesehen haben, besteht der Trick von H5Table darin, dass es einen Compound-Datentyp erzeugt, bei dem für jede "Spalte" ein Feld vorhanden ist. LINK.
Wenn ich Sie wäre, würde ich die Spaltennamen in ein Attribut (Array von Zeichenfolgen) schreiben und den Datentyp einfach halten.
Um eine Liste von Zeichenketten in C++ erstellen ich wie folgt:
H5::H5File m_h5File;
m_h5File = H5File("MyH5File.h5", H5F_ACC_RDWR);
DataSet theDataSet = m_h5File.openDataSet("/channel001");
H5Object * myObject = &theDataSet;
//The data of the attribute.
vector<string> att_vector;
att_vector.push_back("ColName1");
att_vector.push_back("ColName2 more characters");
att_vector.push_back("ColName3");
const int RANK = 1;
hsize_t dims[RANK];
StrType str_type(PredType::C_S1, H5T_VARIABLE);
dims[0] = att_vector.size(); //The attribute will have 3 strings
DataSpace att_datspc(RANK, dims);
Attribute att(myObject->createAttribute("Column_Names" , str_type, att_datspc));
vector<const char *> cStrArray;
for(int index = 0; index < att_vector.size(); ++index)
{
cStrArray.push_back(att_vector[index].c_str());
}
//att_vector must not change
att.write(str_type, (void*)&cStrArray[0]);