Eigen::NullaryExpr вход для оператора
Может кто-нибудь, пожалуйста, помогите мне с пониманием Eigen::NullaryExpr().
У меня есть функтор с оператором () внутри
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" в оператор (), чтобы я мог использовать его внутри него.
Было бы очень любезно, если бы кто-то объяснил, в чем моя ошибка.
Заранее спасибо.
1 ответ
Вы должны объявить 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));