1 回答
TA贡献1796条经验 获得超4个赞
我已经证实了我的怀疑,现在有了正确的答案。根本问题是我在使用 C++ API 时出错(在某些情况下这会导致只写 1/2 的双精度数),而我实际上是在尝试在 GO 中重复这个错误。其实解决方法很简单。
传递到属性方法中的属性类型read不是属性的类型,而是存储在内存中时您希望将其转换为的类型。这意味着我的 C++ 代码应该简单得多,因为不需要检查属性类型,也不需要检查static_cast结果。要读取和存储属性值,依靠 HDF5 执行转换并在属性不可转换为双精度值时抛出合适的异常,非常简单
const auto att = dataSet.openAttribute("my attribute name");
att.read(H5::PredType::NATIVE_DOUBLE, &attributeValue);
GO 版本的工作量更大,因为我们必须手动管理对象生命周期和错误条件,但就在这里。(请注意,我假设“...处理错误...”也涉及提前退出,否则需要额外的 if 语句来检查 att 是否为 nil。)
att, err := dataSet.OpenAttribute("my attribute name")
if err != nil {
...handle the error...
}
err = att.Read(&attributeValue, hdf5.T_NATIVE_DOUBLE)
if err != nil {
...handle the error...
}
err = att.Close()
if err != nil {
...handle the error...
}
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报