2017-12-28 21 views
1

オプションの引数を持つ関数を作成する必要があります。私はパラメータにデフォルト値を与えるべきであるようです。このアプローチは、オプションのパラメータタイプがdoubleやintegerの場合に非常に有効です。私はデフォルト値を0またはNULLに設定できます。しかし、オプションのパラメータがアルマジロ行列であると仮定します。 NULL行列を定義することはできません。私はこのコードをチェックするが動作しません。Armadilloのオプションのパラメータを持つ関数

mat test(mat& X, mat& Y = zeros(2,2).clear()){ 
    if(Y.empty()){return X;} 
    return X*Y; 
    } 

デフォルト値のYを空白(または空)の行列に設定したいとしました。私は次にifコマンドを使ってYが空であるかどうかを調べることができます。

答えて

0

emptyではなく、is_emptyと思っています。

メンバー関数resetは、行列を空にするdocumentedです。しかし、私は、デフォルトで構築された行列も空であると考えています。

しかし、より大きな問題があります。パラメータYを非const参照で渡しているため、一時的な式をデフォルトのパラメータとして使用することはできません。 (あなたはダングリング参照で終わると思いますので、const参照渡しは、悪いことでしょう。)私は値渡し、またはconst参照によって、あなたの空行列の静的定数を定義するのいずれかを示唆している:

mat const Empty = mat(); 
mat test(mat const & X, mat const & Y = Empty) { ... } 

または

mat test(mat X, mat Y = mat()) { ... } 
+0

ありがとうございます。最初のコードは動作しますが、私がtest(x)を呼び出すとエラーが出ます:Yはデフォルト値なしで見つからない(これは奇妙です)。デフォルト値は明確に定義されています。 2番目のコードは機能しません。関数testの引数YにC++のデフォルト値 'mat()'を解析できません。人々はトピックを重複しているとマークしました。しかし、私が見つけた解決策では、Rcpp NumericMatrixを使用して、Armadillo Matrixに変換する必要があります。 Armadilloのパラメータにデフォルト値を使用することはできませんか? –

+0

これらのいずれかに答えるためにコードを投稿する必要があります。彼らはおそらく新しい質問であるべきです。 –

関連する問題