Đây là mã của tôi:Có thể sử dụng cuộc gọi hàm thành viên làm đối số mặc định không?
struct S
{
int f() { return 1; }
int g(int arg = f()) { return arg; }
};
int main()
{
S s;
return s.g();
}
này thất bại trong việc biên dịch với các lỗi:
error: cannot call member function 'int S::f()' without object
Cố this->f()
không hoạt động, hoặc, như this
có thể không được sử dụng trong bối cảnh đó.
Có cách nào để thực hiện công việc này, vẫn đang sử dụng đối số mặc định không?
Tất nhiên nó có thể được giải quyết bằng cách không sử dụng đối số mặc định ở tất cả:
int g(int arg) { return arg; }
int g() { return g(f()); }
tuy nhiên đó được tiết xem xét rằng trong "mã thực" có nhiều thông số trước khi arg
, và một số các chức năng theo mẫu này. (Và thậm chí xấu hơn nếu có nhiều đối số mặc định trong một hàm).
NB. This question trông tương tự lúc đầu, nhưng trên thực tế, ông đang yêu cầu làm thế nào để hình thành một đóng cửa, đó là một vấn đề khác nhau (và các giải pháp liên kết không áp dụng cho tình hình của tôi).
Nó phải là 'int g() {return g (f()); } ', phải không? Ít nhất, trong mã thực, nó sẽ có ý nghĩa nhiều. Tất nhiên, ở đây nó làm việc cho bạn chỉ có câu lệnh 'return' trong' g'. – skypjack
@skypjack cảm ơn, cố định –