我无法创建 returns a unique_ptr 函数的函数指针

I cannot create a function pointer of a function that returns a unique_ptr

我想在 运行 时调用动态库中的函数。该函数 return 是一个指向动态分配对象的指针(我将下面的代码简化为一个 int)。
我希望下面的代码将此指针存储到此对象,以便我随意使用该对象。

#include <dlfcn.h>
#include <memory>

/* myFunction() is supposed to be in my dynamic library */
std::unique_ptr<int> myFunction()
{
    return std::unique_ptr<int>(new(int));
}

int main(int argc, char *argv[])
{
    int *(*functionPtr)() = nullptr;

    void *handle = dlopen(argv[1], RTLD_NOW);
    int *symbolAddress = static_cast<int *>(dlsym(handle, "myFunction"));

    *(int **)(&functionPtr) = symbolAddress;

    int *x = functionPtr();
    //std::unique_ptr<int> x = functionPtr();

    return 0;
}

上面的代码可以编译,但我写了函数 myFunction 的 return 类型是 "int *"(在主函数中),这在我的库中的函数声明中不是这种情况。

PS :在 post 中,我调用 "object" 类型 "int" 来简化,在我的示例中。
我的最终目标是取消对最后一行的注释。

我可能做错了事。我仍在学习语言,但我想正确编码,所以我愿意重组我的代码。

myFunction的类型是std::unique_ptr<int> ()。因此,指向 myFunction 的指针的类型是 std::unique_ptr<int> (*)()。这正是 functionPtr 应该声明的方式:

std::unique_ptr<int> (*functionPtr)();

另外:

*(int **)(&functionPtr) = symbolAddress;

这种类型双关的写入违反了 C 和 C++ 中的严格别名,我不确定为什么 symbolAddressint *。您的代码可能如下所示:

void *symbolAddress = dlsym(handle, "myFunction");
functionPtr = (std::unique_ptr<int>(*)())symbolAddress;