Мне было интересно, могу ли я «угадать» тип возвращаемого значения функции во время выполнения.Чтобы быть более конкретным, я использую dlopen для загрузки файла динамической библиотеки, а затем, вызывая dlsym, я загружаю функцию (давайте назовем ее foo).Функция foo была написана и скомпилирована от пользователя (как общий объект) и может иногда возвращать double или int.Так, например, пользователь может определить foo как:
extern "C" {
int foo(int a){
return a+2;
}
}
или:
extern "C" {
float foo(int a){
return 1.0;
}
}
У меня есть скомпилированный код, который загружает файл .so (поэтому файл скомпилирован из пользователя),Фрагмент кода следующий:
typedef int (*functionPointer) (int ); //this sometimes is typedef int
typedef float (*functionPointer) (int ); //or typedef float
//can i "guess" the return type at runtime?
void *handle = dlopen(userLib.so, RTLD_LAZY);
functionPointer func = (functionPointer) dlsym(handle, "foo");
func(2);
И я хочу знать, можно ли угадать этот typedef во время выполнения.Приведенный выше фрагмент уже скомпилирован и «doesent» знает, какой будет функция в данном общем объекте.