使用增强精神 X3 解析特征矩阵
Parse Eigen Matrix with Boost Spirit X3
我正在尝试使用 Boost Spirit X3 解析一个Eigen::Matrix3f
矩阵,其中输入字符串matrix(a,b,c,d,tx,ty)
,生成的 Eigen 3x3 矩阵如下:
[a, c, tx
b, d, ty
0, 0, 1]
我已经可以合成std::vector<float>
属性,但我想合成Eigen::Matrix3f
。合成Eigen::Matrix3f
(或任何其他自定义矩阵类型(的最佳方法是什么?
我使用 Semantic Actions
找到了解决方案,这是代码:
auto identity = [&](auto& ctx){x3::_val(ctx) = Eigen::Matrix3f::Identity();};
auto a = [&](auto& ctx){x3::_val(ctx)(0,0) = x3::_attr(ctx);};
auto b = [&](auto& ctx){x3::_val(ctx)(1,0) = x3::_attr(ctx);};
auto c = [&](auto& ctx){x3::_val(ctx)(0,1) = x3::_attr(ctx);};
auto d = [&](auto& ctx){x3::_val(ctx)(1,1) = x3::_attr(ctx);};
auto tx = [&](auto& ctx){x3::_val(ctx)(0,2) = x3::_attr(ctx);};
auto ty = [&](auto& ctx){x3::_val(ctx)(1,2) = x3::_attr(ctx);};
auto matRule = x3::rule<class MatId, Eigen::Matrix3f>() = x3::eps[identity] >> x3::no_case["matrix"]
>> "("
>> x3::float_[a]
>> ","
>> x3::float_[b]
>> ","
>> x3::float_[c]
>> ","
>> x3::float_[d]
>> ","
>> x3::float_[tx]
>> ","
>> x3::float_[ty]
>> ")";
std::string teststr = "matrix(2,3,4,5,6,7)";
Eigen::Matrix3f mat;
bool success = x3::phrase_parse(teststr.begin(), teststr.end(), matRule, x3::space, mat);
if (success) std::cout << mat << std::endl;
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 特征命名访问向量段
- 将特征矩阵的向量设置为0
- 特征:模板函数中矩阵的平面图
- basic_string的前导/尾部不区分空格的特征
- 特征 3 类的模板专用化
- 特征 c++:复矩阵的面积双曲正切(atanh)
- C++ 中的特征向量计算
- 根据C++标准的定义实现"is_similar"类型特征
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- 提升精神 x3 - 懒惰解析器
- 有没有办法找到特征矩阵系数的中值?
- boost::spirit::x3 中的通用解析器生成器
- 增强精神 X3:错误:在"..."中没有名为"大小"的类型
- 如何将高维数据映射到特征类型?
- 将平面阵列重塑为复杂的特征类型
- 特征 LLT 模块给出不正确的结果?
- 使用增强精神 X3 解析特征矩阵