gpt4 book ai didi

c++ - C++ 中外部库的命名空间

转载 作者:可可西里 更新时间:2023-11-01 17:44:08 25 4
gpt4 key购买 nike

我正在尝试链接到一个我无法控制的外部库,它的函数没有任何命名空间。

因为我不想与该库中定义的名称发生冲突:如何将外部 header 包含在我自己创建的 namespace 中?

我知道下面的代码是行不通的,但问题的精神是存在的:

namespace extLib {
#include "externalFolder/externalHeader.h"
}

最佳答案

如果您使用的是仅包含 header 的库,您提到的方法可能会奏效。至少我现在想不出任何问题。

但是,如果您有一个必须链接到的已编译库,则无法将库函数本身放入它们自己的命名空间中(至少在不重新编译您自己版本的所述库的情况下无法做到)。那是因为在 .dll.so 或者你有什么,每个函数都有一个 includes all namespaces ( example ) .当您最终链接到库时,您只能“访问”那些确切名称下的函数,这要求您的函数调用与编译版本相同(或者,在您的情况下,没有)命名空间。

“经典”解决方法是围绕库编写一个薄包装器,其中对于每个公开的函数,您都可以:

wrapper.h:

namespace libraryWrapper
{
void bar(int);
}

包装器.cpp

#include "realLibrary.h" // Defines bar(int)

void libraryWrapper::bar(int x)
{
::bar(x)
}

Basic example

关于c++ - C++ 中外部库的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51750227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com