15

クラスオブジェクトパラメータをデフォルトとして設定して関数を設定したい。しかし、それを行おうとすると、コンパイルに失敗します。

class base {
 // ...
};

int myfunc(int a, base b = NULL) {
    if (NULL = b) {
        // DO SOMETHING
    } else {
    // DO SOMETHING
    }
}

ここでコンパイルしようとすると、「デフォルトの引数basebはint型です」というエラーが表示されます。

4

4 に答える 4

26

NULLオブジェクトを C++ にすることはできません。

パラメータをデフォルトに設定するには、次を使用します。

int myfunc(int a, base b = base())
于 2012-08-25T11:48:23.373 に答える
17

ここには 3 つの明らかなオプションがあります。

まず、オーバーロードを使用して、呼び出し元が渡すbかどうかを選択できるようにします。

int myfunc(int a) { ... }
int myfunc(int a, base& b) { ... }

bこのようにして、ポインターを使用せずに渡すことができます。オブジェクトのスライスbを避けるために、参照型またはポインター型を作成する必要があることに注意してください。

次に、2 つの個別の実装が必要ない場合は、bに設定できるポインターを作成しますNULL

int myfunc(int a, base* b = NULL) { ... }

3 番目に、nullable の概念をカプセル化するために何かを使用できますboost::optional

int myfunc(int a, boost::optional<base&> b = boost::optional<base&>()) { ... }
于 2012-08-25T12:02:48.033 に答える