しかしstd::vector
の使用を考えると...私はここでそれらをデフォルトとしましたが、それはオプションだnullptr
、これをチェック..
const std::complex<double> Class::func(const std::complex<double> &x, \
std::vector<double> *y = nullptr, \
std::vector<double> *z = nullptr) const;
を渡します「空」vector
は?これはあなたが必要とする「オプションの」値として使用できます。
元のコードの注釈。 「null」参照は無効です。つまり、std::vector<double> &y = 0
はコンパイルされません。ポインタをその場所で使用することができますが、すぐに割り当てが必要であるとは限りません。
const std::complex<double> Class::func(
const std::complex<double> &x,
std::vector<double>* y = nullptr,
std::vector<double>* z = nullptr) const;
機能オーバーロードは、このような状況ではよくある回答です。またstd::optional
あり
const std::complex<double> Class::func(
const std::complex<double> &x) const;
const std::complex<double> Class::func(
const std::complex<double> &x,
std::vector<double>& y) const;
const std::complex<double> Class::func(
const std::complex<double> &x,
std::vector<double>& y,
std::vector<double>& z) const;
機能の内部は...最終的な実装のためのそれぞれに延期されています。
const std::complex<double> Class::func(
const std::complex<double> &x,
std::optional<std::vector<double>> &y,
std::optional<std::vector<double>> &z) const;
標準ライブラリで利用できない場合は、boost::optional
もあります。
を'std :: optional'があります。さもなければ 'boost :: optional'があります。 – NathanOliver
参照の代わりにポインタを渡し、デフォルト値をnullptrに設定します。次に、あなたのコードにy!= nullptrとz!= nullptrが入っているかどうかをチェックすれば完了です。小さな警告では、デフォルト値を持たない限りパラメータを持つことができません(文字列にはデフォルト値があるはずですが、小さな型を使用して重くすることはできません)。 –
関数内からyまたはzを変更する必要がありますか?言い換えれば、yとzは 'const std :: vector&z' –
log0