在不改变库代码的情况下处理类歧义



我有一个c++代码链接两个共享库(假设是foo1)。So和foo2.so)。在这两个库中,我有一个名为"Mesh"的类,当我尝试实例化类Mesh时,编译器无法知道我试图使用哪一个(显然我知道我想实例化哪一个)。我得到了"错误:对"网格"的引用是含糊的">

当然,我可以修改其中一个库的源代码,将Mesh类包装在名称空间周围,这样就可以解决问题。不过,我希望避免更改库的代码。是否有一种方法可以消除使用库的源文件中的这种模糊性?

谢谢你,拉斐尔。

通过使用动态库(linux中的.so),您可以加载每个库并使用每个句柄来区分调用。参见动态加载(DL)库

例如:

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
class Meshib
{
void * _handle;
double (*_cosine)(double);
public:
Meshib( const char * libraryPath)
{
char *error;
_handle = dlopen (libraryPath, RTLD_LAZY);
if (!_handle) {
fputs (dlerror(), stderr);
exit(1);
}

_cosine = reinterpret_cast<decltype(_cosine)>( dlsym(_handle, "cosine") );
if ((error = dlerror()) != NULL)  {
fputs(error, stderr);
exit(1);
}
}
~Meshib() {
dlclose(_handle);
}
double cosine(double v) { return (*_cosine)(v); }
};

int main(int argc, char **argv)
{
Meshib meshLib1( "foo1.so" );
Meshib meshLib2( "foo2.so" );
printf("%fn", meshLib1.cosine(2.0));
printf("%fn", meshLib2.cosine(2.0));
}

请参阅本文了解c++类动态加载。

相关内容

  • 没有找到相关文章

最新更新