我知道当你使用dlopen()加载一个动态C ++库时,你可以获得指向该库中函数的指针,但有没有办法有效地(性能很重要)做另一个方式是什么?
我知道我可以在库中调用一个函数(初始化库时),传递一个指向函数的指针数组,或者只是将指针单独发送给一个函数。 (尽管数组可能会更好,因为它允许我添加函数但不需要更新所有旧插件)
我不确定这是否有效,因为可能有一百个函数,将所有这些函数发送到10个库可能效率不高。
但是我对动态库不是很有经验,所以我只是想知道你们是否知道更好的是这样做。
编辑:也许把所有这些函数放在一个类中,然后通过函数调用发送一个类指针?那会有用吗?答案 0 :(得分:2)
“但我对动态图书馆不是很有经验”
这是提示:你不想这样做。
或许看看Boost Extension(不是提升的官方部分),它采用了高级C ++方法。
也就是说,大多数平台在一定程度上支持这一点。例如。 AIX上的XlC ++有rtld(需要一个明确的'导出'符号映射,IIRC),我在windows和linux上也有同样的工作(我们的第三方工作流引擎需要它)。发送fptrs数组似乎最实用,更接近'插件'模式。