gpt4 book ai didi

c++ - 在模板函数中将 Ref<> 用于通用特征矩阵

转载 作者:太空狗 更新时间:2023-10-29 21:37:54 24 4
gpt4 key购买 nike

这是我想写的一个函数:

template<typename NumType> using Vec = Eigen::Matrix<NumType, Eigen::Dynamic, 1>;


template<typename T>
void foo(Eigen::Ref<Vec<T>> p)
{
// fill p with things
}

void main()
{
Vec<double> v(2);
foo(v)
}

特别是我希望能够调用 foo没有将类型参数传递给模板,而是让函数根据参数推断类型。当我运行此代码时,出现错误

No matching function call to 'foo'
Candidate template ignored: could not match 'Ref' against 'Matrix'

如果我将类型传递给函数调用,则此函数可以正常工作,例如 foo<double>(v) .我也知道类型 T可以推断如果foo的签名是

template<typename T>
void foo(Vec<T> & p)

但这不是通过引用传递特征向量的好方法,因为它破坏了表达式模板的优势。

我也不能使用MatrixBase引用传递方法

template<typename Derived>
void foo(Eigen::MatrixBase<Derived>& p)

因为我想确定传入的 vector 是 T 类型的,而且我不知道如何使用这种方法确保这一点。

有没有办法使用Ref<>在这样的模板函数中,它将推断类型 T ?感谢所有帮助。

最佳答案

对于模板代码,使用 MatrixBase 方法,并控制标量类型,然后使用静态断言或 enable_if 构造。使用 typename Derived::Scalar 获取表达式的标量类型。

关于c++ - 在模板函数中将 Ref<> 用于通用特征矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36632765/

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