Một hàm quá tải sẽ đưa cả hàm functor vào, với loại lambda là có thể quyết định (có thể chuyển thành một std::function
(xin vui lòng sửa cho tôi nếu tôi sai). Câu hỏi là: Tại sao có lỗi biên dịch bên dưới, mặc dù loại lambda rõ ràng định nghĩa? ( [&]() -> Type {}
)
Xin lưu ý rằng, đối với giải pháp hiện tại của tôi, tôi cần tham chiếu bắt giữ, đó là lý do tại sao mã chứa logic cho nó.
Ví dụ sau mô tả vấn đề:
#include <iostream>
#include <string>
#include <functional>
void do_some(std::function<void(int)> thing)
{
thing(5);
}
void do_some(std::function<bool(int)> thing)
{
if (thing(10))
{
std::cout << "it's true!" << std::endl;
}
}
int main()
{
int local_to_be_modified = 0;
do_some(
[&](int in)
{
local_to_be_modified = in;
std::cout << "This is void-" << std::endl;
}
);
do_some(
[&](int in) -> bool
{
// error: call to 'do_some' is ambiguous
local_to_be_modified += in;
std::cout << "This is bool-" << std::endl;
return true;
}
);
}
std::function<void(int)>
có thể được xây dựng ngay cả từ lambda trả về một cái gì đó (khiến giá trị trả về bị bỏ qua).