gpt4 book ai didi

c++ - 在模板函数中使用 Eigen::LLT

转载 作者:行者123 更新时间:2023-11-27 23:49:55 25 4
gpt4 key购买 nike

我写了下面的函数:

template<typename mattype, typename vectype>
inline static boost::any ApplyCholesky(boost::any const& A, boost::any const& x) {
const Eigen::LLT<mattype>& chol = boost::any_cast<Eigen::LLT<mattype> const&>(A);

const mattype& mat = chol.matrixL();
const vectype& vec = boost::any_cast<vectype const&>(x);
assert(mat.cols()==vec.size());

vectype soln = mat.triangularView<Eigen::Lower>()*mat.transpose()*vec;

return soln;
}

基本上,我希望能够调用如下内容:

ApplyCholesky<Eigen::MatrixXd, Eigen::VectorXd>(A, x);
ApplyCholesky<Eigen::Matrix4d, Eigen::Vector4d>(A, x);
ApplyCholesky<Eigen::Matrix2f, Eigen::Vector2f>(A, x);

但是,我收到以下错误:

error: expected expression
vectype soln = mat.triangularView<Eigen::Lower>()*mat.transpose()*vec;

我不知道我做错了什么。我有一个类似的解决线性系统的 ApplyInverseCholesky(即,我需要两个函数:(i) y = A x 和 (ii) y = A^{-1} x)具有相同的错误

最佳答案

vectype soln = mat.template triangularView<Eigen::Lower>()*mat.transpose()*vec;

它正在解析 <作为小于和 >作为大于。然后它死于 () .

这是因为triangularView是否为模板取决于 mat 的类型.为了简化解析,C++ 规定当 token 可以是模板、类型或值时,具体取决于未绑定(bind)模板参数的类型,解析器应假定它是一个值。

程序员必须使用 typenametemplate要消除歧义的关键字。

关于c++ - 在模板函数中使用 Eigen::LLT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com