我定义了一个特征矩阵-
template <typename T>
using Vec3 = Eigen::Matrix<T, 1, 3, Eigen::DontAlign | Eigen::ColMajor>;
using Vec3d = Vec3<double>;
字符串
我试着把Vec 3d写到json文件中,如下所示-
template <typename T>
void to_json(json& j, const Vec3<T>& v) {
j = {{"X", v(0)}, {"Y", v(1)}, {"Z", v(2)}};
}
// Usage
Vec3d test(1.f, 2.f, 3.f);
frameJson["Vec3d"] = test;
型
输出存储为array
,而不是像to_json
中指定的方式,似乎它没有进入to_json
??
"Vec3d": [
1.0,
2.0,
3.0
]
型
但我希望它像下面的to_json
中指定的方式-
"Vec3d": [
"X": 1.0,
"Y": 2.0,
"Z": 0.0
]
型
模板化的to_json
的实现方式有什么问题吗?我该怎么做。
PS:模板化的adl_serializer from_json()
在阅读时会是什么样子?
1条答案
按热度按时间ilmyapht1#
我没有找到默认的
Eigen::Matrix
json序列化器的实现位置,但是要让你的自定义序列化器工作,只需将它放在Eigen
命名空间中:字符串
或者,像第三方类型序列化文档中建议的那样,您可以编写
adl_serializer
专门化:型
第二个选项通常更可取,因为它不会污染第三方名称空间。
Demo