Tôi muốn sử dụng một đối số std::function
làm phương pháp và đặt giá trị mặc định là std::stoi
.Cách tạo hàm std :: làm đối số phương thức với std :: stoi làm giá trị mặc định?
Tôi đã thử các mã sau:
void test(std::function<int(const std::string& str, size_t *pos , int base)> inFunc=std::stoi)
Đáng tiếc là tôi nhận được lỗi sau:
no viable conversion from '<overloaded function type>' to 'std::function<int (const std::string &, size_t *, int)>'
tôi quản lý để biên dịch bằng cách thêm tạo ra một phương pháp chuyên dụng.
#include <functional>
#include <string>
int my_stoi(const std::string& s)
{
return std::stoi(s);
}
void test(std::function<int(const std::string&)> inFunc=my_stoi);
Có gì sai trong phiên bản đầu tiên? Không thể sử dụng std::stoi
làm giá trị mặc định?
Tại sao nó không khiếu nại trên 'typedf int (* fn) (const std :: string &, size_t *, int); fn f = std :: stoi; '? –
@CharlesPehlivanian: Bởi vì chỉ có một quá tải có thể chuyển đổi thành loại chức năng đó (đó là lý do khiến diễn viên trong ví dụ của tôi hoạt động). Hoặc có thể là một đối số cho hàm tạo mẫu của 'std :: function' và trình biên dịch không được phép khởi tạo cả hai chuyên môn mẫu để xem cái nào có thể hợp lệ. –
@MikeSeymour: cảm ơn lời giải thích, tôi đã nghĩ rằng có một cái gì đó như thế này nhưng không thể tìm ra cái gì. –