2016-03-14 1 views
0

Может кто-то, пожалуйста, помогите мне с пониманием 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 = истина», то есть

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

и модификации:

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

мой код компилируется и работает нормально (в том смысле, что я не могу использовать условный оператор внутри оператора() больше).

Недостаточное понимание NullaryExpr() вызывает эту ошибку. Мой вопрос в том, как передать аргумент «flag» в operator(), чтобы я мог использовать его внутри него.

Было бы очень мило, если бы кто-то объяснил, что моя ошибка.

Заранее спасибо.

ответ

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)); 

 Смежные вопросы

  • Нет связанных вопросов^_^