gpt4 book ai didi

c++ - Eigen::NullaryExpr 输入到运算符

转载 作者:行者123 更新时间:2023-11-28 05:47:09 25 4
gpt4 key购买 nike

谁能帮我理解 Eigen::NullaryExpr()。

我有一个带有 operator() 的仿函数

template<typename Scalar>
struct scalar_op
template<typename Index>
inline const Scalar operator()(Index, Index = 0,bool flag=true) const
{
if(flag)
.....
else
.....
}
}

现在我使用运算符作为

scalar_op<Scalar> _f1;
Matrix<Scalar,Dynamic,-1> samples(int nn)
{
return Matrix<Scalar,Dynamic,-1>::NullaryExpr(nn,1,true,_f1);
}

我收到如下错误消息:

错误 C2780:“const Eigen::CwiseNullaryOp Eigen::DenseBase::NullaryExpr(const CustomNullaryOp &)”:需要 1 个参数 - 提供 4 个

没有参数“bool flag=true”即

inline const Scalar operator()(Index, Index = 0) const

和修改:

return Matrix<Scalar,Dynamic,-1>::NullaryExpr(nn,1,_f1);

我的代码可以正常编译和工作(从某种意义上说,我不能再在 operator() 中使用条件语句)。

我对 NullaryExpr() 的不理解导致了这个错误。我的问题是如何将参数“flag”传递给 operator () 以便我可以在其中使用它。

如果有人能解释我的错误是什么,那就太好了。

提前致谢。

最佳答案

您应该将 flag 声明为您通过其构造函数初始化的仿函数的成员,例如:

template<typename Scalar> struct scalar_op {
bool m_flag;
explicit scalar_op(bool flag=true) : m_flag(flag) {}
template<typename Index>
inline const Scalar operator()(Index, Index = 0) const
{
if(m_flag)
.....
else
.....
}
};

并这样调用它:

VectorXd::NullaryExpr(n, scalar_op<double>(false));

关于c++ - Eigen::NullaryExpr 输入到运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35996852/

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