typedef macro & MatrixXcf of eigen
今天我在玩eigen,然后它的文档里有一个snippet ComplexEigenSolver_compute.cpp, 第一行有一个类型 MatrixXcf, 样例中使用了MatrixXcf::Random(4,4)
这种方式生成矩阵,我想生成另一个指定的,于是想要查看源码的构造函数定义,然后就用了之前学会的方法
grep -R MatrixXcf *
结果搜出来的结果都是在test
,bench
,doc
文件夹中,显然没有我需要的定义,但是我却可以正常编译,这让人有点不知所措,然后我删掉了.git
上层文件夹中除了.git
和EIGEN
文件夹之外的所有文件,但是编译依然成功,于是我把它放到VSCode 中,用了查看定义这个功能结果真的出来了.在这里
EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<float>, cf)
真是让人大跌眼镜,之后
#define EIGEN_MAKE_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \
EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \
EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \
EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \
EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \
EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \
EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 4)
#define EIGEN_MAKE_TYPEDEFS(Size, SizeSuffix) \
/** \ingroup matrixtypedefs */ \
/** \brief \cpp11 */ \
template <typename Type> \
using Matrix##SizeSuffix = Matrix<Type, Size, Size>; \
/** \ingroup matrixtypedefs */ \
/** \brief \cpp11 */ \
template <typename Type> \
using Vector##SizeSuffix = Matrix<Type, Size, 1>; \
/** \ingroup matrixtypedefs */ \
/** \brief \cpp11 */ \
template <typename Type> \
using RowVector##SizeSuffix = Matrix<Type, 1, Size>;
看来下一次要搜索Matrix##了!