如何解决如何将本征矩阵行引用作为向量传递给在另一个.cpp中实现的func?
的问题在该页面的内部 rhashimoto 为类似问题提供了很好的答案:
#include <iostream>
#include <Eigen/Core>
template<typename V>
void set_row(V&& v) {
v = Eigen::Vector3f(4.0f,5.0f,6.0f);
}
int main() {
Eigen::Matrix3f m = Eigen::Matrix3f::Identity();
set_row(m.row(1));
std::cout << m;
return 0;
}
问题在于何时需要将set_row函数放入另一个cpp文件中。 通过这种方式,编译器会收到未定义的参考错误。 我找到了解决here
的方法他们说您可以解决的地方:
您能告诉我如何达到最后一点吗?
解决方法
最好在标头中使用模板。
如果必须将其放在CPP文件中,则可以按照建议使用模板函数和显式实例化。关键是使用Eigen Block
type。
#include <Eigen/Dense>
template <int N,int M>
void set_row(Eigen::Block<Eigen::Matrix<float,N,M>,1,M> row) {
// Note: this implementation is not correct in the general case.
row = Eigen::Vector3f(4.0f,5.0f,6.0f);
}
// Explicit instantiation for fixed 3-by-3 case.
template void set_row(Eigen::Block<Eigen::Matrix<float,3,3>,3> row);
// Explicit instantiation for dynamic N by M case.
// Note that current implementation will not work.
template void set_row(Eigen::Block<Eigen::Matrix<float,Eigen::Dynamic,Eigen::Dynamic>,Eigen::Dynamic> row);
工作中的Godbolt示例:https://godbolt.org/z/T4EYsc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。