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;
}
Me preocupaba cómo asignar un objeto __stdcall function
a std::function
. Pero sin ninguna convención de llamada específica, parece que funciona bien. ¿Cómo puede saber std::function
qué es la convención de llamadas?¿Cómo sabe std :: function sobre las convenciones de llamadas?
De la misma manera que el compilador sabe cómo llamar a la función sin 'std :: function'. 'std :: function' usa type-erasure para crear una pequeña caja negra interna que, cuando se llama a' std :: function' se le pide que realice la llamada "real", que el compilador ya ha descifrado. – GManNickG