1

次のようなクラスがあるとします。

class Solution {    
public:    
    std::vector<double> x;
}

次のような関数があるとします。

void function(Solution& sol) {
    // do some calculations on the solution vector
}

function状況によっては、 vector を使用して直接計算を実行したい場合がありxます。ただし、状況によっては、 vector のマッピングによって生成される別の vector を使用して計算を実行したい場合がありxます。

これらの可能な状況を考えると、クラスに追加のメンバーを導入することは理にかなっていますSolutionが、最初の状況では、この追加のメンバーは単に を参照しx、2 番目の状況では、この追加のメンバー自体がstd::vector、いくつかのマッピングによって決定される別のメンバーになります。形。

したがって、理想的には、 として、または単に への参照としてSolution名前が付けられたメンバーを作成/定義するctor を追加できます。次に、を使用して直接操作するだけです。ystd::vectorxfunctiony

どうすればこれを行うことができますか?

4

1 に答える 1

4

関数を次のように定義できます。

void function(std::vector<double>& x)

状況に応じて、異なるベクトルをそれに渡します

ctors で参照を使用して編集する

class Solution 
{    
    std::vector<double> x;
    std::vector<double>& y; 
public:    
    Solution(std::vector<double>& _y) : y(_y) { }
    Solution() : y(x) { }
    void function() { /* do work on y*/ }    
};

このようにして、function常に同じ参照で動作しますが、この参照が参照するデータを制御できます。xとが非公開になったことに注意してください。これにより、これらのメンバーがメソッドyを介してローカルでのみ使用されるようになります。function()

于 2012-11-15T00:57:44.717 に答える