接受 Matrix col 和 vector 的特征模板函数
Eigen templated function that accepts both Matrix col and vector
我不明白如何编写接受向量和矩阵列的模板函数?
例如:
template<typename T>
void foo(
const Eigen::MatrixX<T>& M){
}
int main(){
Eigen::VectorX<double> v(3);
Eigen::MatrixX<double> m(4,3);
foo(m); // fine
foo(m.col(0)); // broken
foo(m.row(0)); // broken
foo(v); // broken
}
只有foo(m);
可以。
我 seen examples that do this with predefined types and I've seen examples 探索模板。他们都没有展示如何使用模板函数解决所描述的任务。
编辑:
另外我想传递动态大小向量,但不是必需的,固定大小
我可以使用 MatrixBase
:
让它工作
#include <Eigen/Dense>
template<typename T>
void foo(const Eigen::MatrixBase<T>& M){}
int main(){
Eigen::Vector3d v(3);
Eigen::Matrix<double,4,3> m(4,3);
Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> q(5,6);
foo(m);
foo(m.col(0));
foo(m.row(0));
foo(v);
foo(q);
}
我不明白如何编写接受向量和矩阵列的模板函数?
例如:
template<typename T>
void foo(
const Eigen::MatrixX<T>& M){
}
int main(){
Eigen::VectorX<double> v(3);
Eigen::MatrixX<double> m(4,3);
foo(m); // fine
foo(m.col(0)); // broken
foo(m.row(0)); // broken
foo(v); // broken
}
只有foo(m);
可以。
我 seen examples that do this with predefined types and I've seen examples 探索模板。他们都没有展示如何使用模板函数解决所描述的任务。
编辑: 另外我想传递动态大小向量,但不是必需的,固定大小
我可以使用 MatrixBase
:
#include <Eigen/Dense>
template<typename T>
void foo(const Eigen::MatrixBase<T>& M){}
int main(){
Eigen::Vector3d v(3);
Eigen::Matrix<double,4,3> m(4,3);
Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> q(5,6);
foo(m);
foo(m.col(0));
foo(m.row(0));
foo(v);
foo(q);
}