2017-10-25 7 views
0

私が作業しているクラスでEigenを使用しています。ここでのコードの抜粋です:C++:Eigenを使用するときに関数をコンストラクタに渡す

class model { 

public: 
    Eigen::MatrixXd Ac; 

    model (vars &, std::function<Eigen::MatrixXd()>, std::function<Eigen::MatrixXd()>); 
}; 

model::model (vars & vars, std::function<Eigen::MatrixXd()> muX, 
std::function<Eigen::MatrixXd()> muX2) 

    //update Ac 
    Ac = muX(vars) + muX2(vars); 


}; 

アイデアはmodelのオブジェクトを作成する際、ユーザーは機能muXmuX2を供給する必要がありますし、クラスがmuXmuX2を使用してMatrixXd Acに値を入力することです。 varsは、私が作成した複数の変数で構成されるクラスに過ぎず、muXmuX2は、varsのデータを入力として使用すると予想されます。

しかし、私のXCodeでは、「std :: function型のオブジェクトへの呼び出しに関数が一致しません。私はまだコンパイルしていないが、私はコンパイラが私に同じエラーを与えると思う。

+2

'vars&vars'に変更したいと思っていますか?それはひどい名前です。タイプ、変数、またはその両方のいずれかを意味のあるものに思いつくことができると確信しています。 –

答えて

1

std::function<Eigen::MatrixXd()>は、引数を受け入れずにEigen::MatrixXdを返す関数をとることを意味します。これはあなたがしたいことではないと思います。おそらく、それをstd::function<Eigen::MatrixXd(vars&)>

+0

実際、私は 'vars'を取り込み、' MatrixXd'を返したいと思います。また、なぜ 'const'が必要なのでしょうか? – tryingtosolve

+0

@RSahuは正しく編集されています。あなたはconstを必要としません – Valentin

関連する問題