Oto mój kod:Czy można użyć wywołania funkcji member jako domyślnego argumentu?
struct S
{
int f() { return 1; }
int g(int arg = f()) { return arg; }
};
int main()
{
S s;
return s.g();
}
To nie skompilować z błędem:
error: cannot call member function 'int S::f()' without object
Próbując this->f()
nie działa albo, jak this
nie mogą być używane w tym kontekście.
Czy istnieje sposób, aby to zadziałało, nadal używając domyślnego argumentu?
Oczywiście można to obejść w ogóle nie używając domyślnych argumentów:
int g(int arg) { return arg; }
int g() { return g(f()); }
jednak, że dostaje gadatliwy biorąc pod uwagę, że w „prawdziwym kodem” istnieje więcej parametrów przed arg
, a kilka funkcje zgodne z tym wzorcem. (I jeszcze bardziej brzydki, jeśli w jednej funkcji było wiele domyślnych argumentów).
NB. This question na początku wygląda podobnie, ale w rzeczywistości pyta, jak utworzyć zamknięcie, co jest innym problemem (a połączone rozwiązanie nie ma zastosowania w mojej sytuacji).
Powinno to być 'int g() {return g (f()); } ', prawda? Przynajmniej w prawdziwym kodzie, może miałoby to sens. Oczywiście, tutaj działa tak, że masz tylko instrukcję 'return' w' g'. – skypjack
@skypjack thanks, fixed –