用Eigen库理解模板和代码
Unterstanding the templates and the code with Eigen Library
我在学校有这个守则:
#include <Eigen/Dense>
template<<typename Scalar>
void Typedemo(unsigend int dim)
{
using dynMat_t =
Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>;
using dynColVec_t= Eigen::Matrix<Scalar,Eigen::Dynamic,1>;
using dynRowVec_t = Eigen::Matrix<Scalar,1,Eigen::Dynamic>;
using index_t = typename dynMat_t::Index;
using entry_t = typename dynMat_t::Scalar;
dynColVec_t colvec(dim);
dynRowVec_t rowvec(dim);
for (index_t i=0; i< colvec.size(); ++i) colvec(i) = (Scalar)i;
for (index_t i=0; i< rowvec.size(); ++i) rowvec(i) = (Scalar)1/(i+1);
dynMat_t vecprod = colvec*rowvec;
const int nrows = vecprod.rows();
const int ncols = vecprod.cols();
}
我认为Scalar
是模板类型的名称(可能被实例化为double或int), dynMat_t
是Matrixtype,如MatrixX"Scalar"。现在我与dynMat_t::Scalar
的含义斗争,这是矩阵/向量条目的value_type的描述,为什么你需要类型entry_t
?
我看不出这段代码有什么意义。
非常感谢您的帮助
确实,Scalar
是一个模板参数,它指定标量字段(可以是标准类型或用户定义类型),请参阅官方Eigen文档和源代码的第97行,在这里
typedef typename internal::traits<Derived>::Scalar Scalar;
entry_t
只是一个类型别名,在这种情况下和Scalar
一样,所以我猜它只是为了统一符号而使用的。
PS:你的代码中有一个错别字,template<<typename Scalar> void Typedemo(unsigend int dim)
应该是template<typename Scalar> void Typedemo(unsigend int dim)
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- Eigen如何在容器循环中干净地附加矩阵
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 编译创建 Eigen::ThreadPoolDevice 对象的代码时出错
- 使用EIGEN库链接MATLAB和C 代码
- MKL 无法处理使用 Eigen 和 OpenMP 的C++代码
- 用Eigen库理解模板和代码
- 确定eigen是否为SSE指令优化了代码
- 为什么 Eigen 的示例代码倾向于使用<float>类?