int __cdecl ccall(int i)
{
wprintf(L"ccall(%d)", i);
return 0;
}
int __stdcall stdcall(int i)
{
wprintf(L"stdcall(%d)", i);
return 0;
}
int __cdecl wmain(int argc, wchar_t **argv)
{
std::function<int(int)> fnc = ccall;
std::function<int(int)> fnstd = stdcall;
fnc(10); // printed well
fnstd(100); // printed well
return 0;
}
Tôi đã quan tâm làm cách nào để chỉ định đối tượng __stdcall function
cho std::function
. Nhưng không có bất kỳ quy ước cụ thể nào, có vẻ như hoạt động tốt. Làm thế nào có thể std::function
biết quy ước gọi là gì?Làm thế nào để std :: function biết về quy ước gọi điện thoại?
Trong cùng một cách trình biên dịch biết làm thế nào để gọi hàm mà không cần 'std :: function'. 'std :: function' sử dụng type-erasure để tạo ra một hộp đen nhỏ bên trong, khi bạn gọi hàm' std :: function' được yêu cầu thực hiện cuộc gọi "thực", mà trình biên dịch đã tìm ra. – GManNickG