使用 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
是一个 Matrix 类型,如 MatrixX"Scalar"。现在我纠结于 dynMat_t::Scalar
的含义,这是 matrix/vector 条目的 value_type 的描述吗?为什么需要类型 entry_t
?
我看不出这段代码的意义所在。
非常感谢您的帮助。
确实,Scalar
是一个指定标量字段的模板参数(可以是标准类型或用户定义类型),参见official Eigen documentation and the line 97 of the source code here,其中
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)
.
我在学校有这个代码:
#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
是一个 Matrix 类型,如 MatrixX"Scalar"。现在我纠结于 dynMat_t::Scalar
的含义,这是 matrix/vector 条目的 value_type 的描述吗?为什么需要类型 entry_t
?
我看不出这段代码的意义所在。
非常感谢您的帮助。
确实,Scalar
是一个指定标量字段的模板参数(可以是标准类型或用户定义类型),参见official Eigen documentation and the line 97 of the source code here,其中
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)
.