私がC++でプログラミングしているときに、JavaScriptのようなすべての変数にundefined
という値があることを望みます。 は、私は、配列の範囲外の要素の値を返すよ例えば、例外をundefined
を返す代わりに投げるために有用であった、または:(私の意見では)無効な参照を返す
template <typename T, int SIZE>
class MyArray
{
T arr[SIZE];
static T badref;
public:
T &operator[](int i)
{
if (i >=0 && i < SIZE)
return arr[i];
else
throw std::string("OUT-OF-BOUNDS"); // or: return badref; !!
}
};
別汚いですオプションは、事前定義変数の参照を不正な参照変数として戻しています。 null
などを参照変数に割り当てることはできません。
呼び出し元が返された値が正しくないことを知ることができる参照を返すためのパターンが整っていますか?
EDIT:私はあなたが彼のコメントで述べたよう@クリスブースト::オプションを使用することができますpointer
はい、ポインタと呼ばれます。代わりに、 'boost :: optional'があります。 – chris
少なくとも、あなたのbadrefオブジェクトを静的にしておけば、あなたが作成したすべてのMyArrayでスペースを取ることはありません。しかし、私は同意する、それは醜いです。そのようなジェネリックコードでは、むしろ例外をスローします。 – john
@john:はい、私はそれを編集しました。 – deepmax