tôi muốn làm một điều đơn giản:Làm thế nào để sử dụng lambda làm đối số mẫu với giá trị mặc định trong C++?
void DoUntil(auto predicate = [] { return false; });
Rõ ràng điều này không làm việc - tôi phải sử dụng một mẫu đối số:
template <typename P>
void DoUntil(P predicate = [] { return false; });
Nhưng tuyên bố này không làm việc, hoặc - các Clang đưa ra một lỗi:
error: no matching function for call to …
note: candidate template ignored: couldn't infer template argument 'P'
Nếu tôi làm gọi hàm không có đối số, bằng cách nào đó trình biên dịch không suy ra loại từ một đối số mặc định:
int main() { DoUntil(); }
Tôi không muốn sử dụng std::function<>
bằng bất kỳ cách nào.
Có giải pháp nào khác có thể cho vấn đề của tôi không?
Đó là ngữ cảnh không được suy luận. Được trích từ [cppreference] (http: //en.cppreference.com/w/cpp/language/template_argument_deduction) ngữ cảnh không suy luận, Một tham số mẫu được sử dụng trong kiểu tham số của tham số hàm có đối số mặc định đang được sử dụng trong cuộc gọi mà việc khấu trừ đối số đang được thực hiện. – felix
Tại sao bạn không muốn sử dụng 'std :: function'? –