関数シンボルをロードするために dlsym() を使用していました
void (*func)(int);
func = (func*)dlsym(phandle, "function");
これにより、コンパイルエラーが発生しました。ただし、typedefを機能させると
typedef void (*func)(int);
func function = null;
function = (func*)dlsym(phandle, "function");
これはうまくコンパイルされましたが、最初のケースでなぜ失敗したのか理解できませんか? 誰か理由を教えてください。C++ 標準では、void* から関数ポインターへの直接キャストが許可されていないことを読みましたか? これはなぜですか? typedef はこの問題をどのように解決しましたか?