假设您在 Windows 上使用dlopen()
or加载了一个动态库LoadLibrary()
,并且您想从中获取一个符号并将其转换为特定的函数类型。两次写类型真是令人难以置信的多余!
void (*Test)(int, float) =
reinterpret_cast<void (*Test)(int, float)>(dlsym(handle, "Test"));
我希望代码可以在没有 C++11 标准的情况下编译,因此auto
关键字不是一个选项。我尝试使用模板,因为编译器通常可以从给定的参数中检测模板参数,但它似乎不适用于赋值的类型。
template <typename T>
T GetSym(void* handle, const char* symbol) {
return (T) dlsym(handle, symbol);
}
void (*Test)(int, float) = GetSym(handle); // does not compile
有没有办法减少代码中的冗余?从动态加载的库中检索大量函数时,每次都编写两次转换是很糟糕的!