Theo trình biên dịch gcc-4.6, lệnh gọi hàm func trong ví dụ dưới đây là mơ hồ.Gọi mơ hồ (chuyển đổi từ char * sang lambda vs std :: string)
void func(const std::string &str) {
}
void func(std::function<std::string()> f) {
}
void test() {
func("Hello");
}
Trình biên dịch có đúng khi nói điều này không? Nếu tôi loại bỏ quá tải đầu tiên mã này sẽ không biên dịch vì nó sẽ không khởi tạo các mẫu liên quan.
Có cách nào để giải quyết vấn đề này bên cạnh đổi tên một trong hai hàm hoặc bằng cách chuyển đổi thành chuỗi std :: rõ ràng không?
Điều đó có vẻ vô lý! –
@Tomalak: Đúng vậy. – Puppy
Tôi thậm chí không chắc liệu việc triển khai có được phép thực hiện điều này hay không. Tôi sẽ rất vui nếu có ai đó có thể tìm thấy một tài liệu tham khảo cụ thể hoặc giải thích thêm. –