2

パラメータが if 条件を満たさない場合に、この get 関数が何を返すべきかを知りたい

    template <class Object>
    const Object& SparseMat<Object>::get(int c, int r) //const
    {
        if((c >= 0)&&(c <= cCapacity)&&(r >= 0)&&(r <= rCapacity))
        {
            return mObjects[c][r];
        }
        //what should I return here?
    }
4

3 に答える 3

0

何を返すべきか、また返す必要があるかどうかを決定するのは完全にあなた次第です。たぶん、返す代わりに、中止 (「クラッシュ」) するか、例外をスローする必要がありますか? 他の回答がすでに示唆しているように、この場合、例外をスローすることがネストアプローチになる可能性があります。

ただし、誤った入力に応答して何かを返すことを本当に主張する場合、そのような場合の選択肢の 1 つは、そのようObjectな状況を処理するために特別に存在するタイプの定義済みの「ダミー」/「ガーディアン」オブジェクトです。

template <class Object>
class SparseMat 
{
  ...
  static Object error_object;
};


template <class Object>
const Object& SparseMat<Object>::get(int c, int r) //const
{
    if((c >= 0)&&(c <= cCapacity)&&(r >= 0)&&(r <= rCapacity))
    {
        return mObjects[c][r];
    }

    return error_object;
}

error_object設計によっては、呼び出し元のコードで簡単に認識できるようにしたい場合があります。または、返されたオブジェクトが「ダミー」であることを認識しなくても、呼び出し元のコードが適切に機能するように、その「ガーディアン」オブジェクトを設計できます。繰り返しますが、これはあなた次第です。

于 2013-10-09T18:25:07.683 に答える