は私のコードです:メンバ関数呼び出しをデフォルト引数として使用できますか?ここ
struct S
{
int f() { return 1; }
int g(int arg = f()) { return arg; }
};
int main()
{
S s;
return s.g();
}
これはエラーでコンパイルに失敗します。this
は、そのコンテキストで使用することはできませんよう
error: cannot call member function 'int S::f()' without object
this->f()
をしようとすると、いずれかの動作しません。
デフォルトの引数を使用して、この作業を行う方法はありますか?もちろん
それがすべてでデフォルト引数を使用しないことで回避することができます。
int g(int arg) { return arg; }
int g() { return g(f()); }
は、しかし、冗長「実際のコード」によりarg
前のパラメータ、およびいくつかがあることを考慮されることをこのパターンに従った関数。 (また、1つの関数に複数のデフォルト引数があった場合はさらに醜い)。
NB。 This questionは最初はよく似ていますが、実際に彼は別の問題であるクロージャをどのように形成するかを尋ねています(リンクされた解決策は私の状況には当てはまりません)。
これは 'int g(){return g(f());にする必要があります。 } '、そうですか?少なくとも、実際のコードでは、それは多分意味をなさないでしょう。もちろん、ここでは 'g'の' return'文だけを持っています。 – skypjack
@skypjackありがとう、固定 –