0

私は Android で NDK を使用しています。要素が null 値になる可能性がある Java の List に似たものを取得したいと考えていました。C++ では null が Java とは異なることを知っているので、要素の値を持つことはオプションです。

Boost にはBoost.Optionalがあることは知っていますが、このためだけにこのライブラリを追加したくありません。return Nullable<double>();私はstackoverflowで このようなコードを見てきました c++/cliでNullable型を使用するには? しかし、これは MS Visual C++ の場合のみだと思います。同様のコードを作成すると、Nullable を解決できなかったと表示されます。

STLPort ライブラリを使用しています。

4

2 に答える 2

0

Null オブジェクト パターンを使用するか、リストに (スマート) ポインターを格納します。

于 2013-03-29T20:54:08.320 に答える
0

intこれは私たちが話している32ビットです。あなたの変数の性質は何ですか - 4294967296 の可能なすべての値が等しく可能で有効であると確信していますか? ほとんどの場合、特定の int 値 (0、-1、または 10 億) を「非値」として指定し、null を扱うのと同じように扱うことができます。リストについてよく考えて、リストに表示されない可能性のある値を選択できるかどうかを確認し、存在する場合はそれを null として扱います。

すべての可能な int 値が等しく有効であると考えることができる唯一の使用例は、32 ビットのハッシュまたはチェックサム (CRC32 など) です。

他のすべてが失敗した場合、null 許容プリミティブの独自の実装をスピンするのはかなり簡単です。基本は次のようになります。

template<typename T>
class Nullable<T>
{
    T _Value;
    bool _IsNull;
public:

    Nullable<T>();
    Nullable<T>(T);
    Nullable<T>(Nullable<T> &);
    Nullable<T> &operator=(Nullable<T> &);
    Nullable<T> &operator=(T);

    operator T(); //Value extractor
    bool IsNull(); //Nullity extractor
};

などなど。デストラクタは必要ありません。null オブジェクトから値を抽出しようとしている場合は、例外をスローすることもできます。

于 2013-03-29T22:19:30.810 に答える