Eigen(C++)中MatrixXd与VectorXd的定义位置查询
找到Eigen中MatrixXd/VectorXd的typedef定义
别担心,这些常用的类型定义确实存在于Eigen源码里,只是它们藏在核心头文件的嵌套结构中,容易被全局搜索忽略。我来给你一步步拆解:
1. 实际定义的位置
这些typedef集中定义在Eigen/src/Core/typedefs.h文件里,你能直接看到类似这样的代码:
typedef Matrix<double, Dynamic, Dynamic> MatrixXd; typedef Matrix<double, Dynamic, 1> VectorXd; typedef Matrix<double, 1, Dynamic> RowVectorXd;
同时这里也包含了其他基础类型的typedef,比如MatrixXf(float版本)、VectorXi(int版本)等。
2. 为什么全局搜索可能找不到
- 搜索范围不全:Eigen的源码结构是分层的,核心定义都在
src/Core的子目录下。如果你的全局搜索只覆盖了根目录的入口头文件(比如Eigen/Core),而没有递归搜索src下的所有子文件夹,就会错过这些定义。 - 头文件嵌套引入:入口头文件(比如
Eigen/Dense或Eigen/Core)会通过#include间接引入typedefs.h,所以你直接看入口头文件时看不到这些typedef,但编译时它们会被正确加载。
3. 快速验证的方法
- 直接打开
Eigen/src/Core/typedefs.h文件,就能看到所有你要找的typedef定义。 - 用预处理器输出验证:在你的测试代码里包含
#include <Eigen/Dense>,然后用编译器的预处理器输出命令(比如GCC的g++ -E your_code.cpp),就能看到这些typedef被展开后的完整内容,确认它们的存在。
内容的提问来源于stack exchange,提问作者Ming Wang
相关产品推荐
相关产品推荐

