Сегодня я столкнулся с чем-то похожим на этот фрагмент кода.
В A.h
:
class A { blah blah blah }
#define CREATE_A_FUNC_NAME ("CreateA")
extern "C" A* CreateA(void);
typedef A* (*funcCreateA)(void);
В main.cpp
:
void* handle = dlopen("libA.so", RTLD_LAZY);
funcCreateA func = (funcCreateA)dlsym(handle, CREATE_A_FUNC_NAME);
A* a = func();
Теперь очевидно, что Ah - это только заголовок для объявлений, и все его реализации хранятся в libA.so
.
Я проверил, что если я правильно настроил свой проект, то есть библиотека правильно связана, я могу просто сделать A* a = CreateA()
чтобы получить указатель на вновь созданный экземпляр A. Отсюда и возникают вопросы. Почему go столько хлопот, чтобы достичь чего-то простого, как один вызов функции? Как называется эта технология или техника? Каковы плюсы и минусы? Когда я должен использовать эту технику? Спасибо!