Вот мой код:
struct S
{
int f() { return 1; }
int g(int arg = f()) { return arg; }
};
int main()
{
S s;
return s.g();
}
Это не скомпилируется с ошибкой:
error: cannot call member function 'int S::f()' without object
Попытка this->f()
тоже не работает, поскольку this
не может использоваться в этом контексте.
Есть ли способ сделать эту работу, все еще используя аргумент по умолчанию?
Конечно, его можно обойти, не используя аргументы по умолчанию:
int g(int arg) { return arg; }
int g() { return g(f()); }
однако это становится подробным, учитывая, что в "реальном коде" перед arg
есть несколько параметров и несколько функций, следующих за этим шаблоном. (И еще более уродливым, если в одной функции было несколько аргументов по умолчанию).