dlopen()
Windows でまたはを使用して動的ライブラリをロードし、LoadLibrary()
そこからシンボルを取得して特定の関数型にキャストしたいとします。型を 2 回記述するのは信じられないほど冗長です!
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
コードの冗長性を減らす方法はありますか? 動的にロードされたライブラリから膨大な数の関数を取得する場合、すべてのキャストを 2 回記述するのは大変なことです。