在C 中将全局函数包括在命名空间中

Include global function in namespace in C++

本文关键字:包括 命名空间 函数 全局      更新时间:2023-10-16

是否有一种方法可以包含全局函数(例如,从库中,我不允许将代码修改(到名称空间的范围中并仍然可以使用它?p>我有两个功能:

base64_decode()
base64_encode()

在两个文件中: Base64.cpp Base64.h

(显然(将Base64.h在我的Extensions名称空间中加入时,可以使用该函数声明,但是链接器无法找到定义(在Base64.cpp中(,因为它们现在包含在我的名称空间中。示例:

namespace Extensions {
    #include "Base64.h"
}

是否有一种方法可以在命名空间中同时实现和声明,而没有修改原始代码和没有 #include ing Base64.cpp

一种常见方法:

#include "Base64.h"
namespace Extensions {
using ::base64_decode;
using ::base64_encode;
}
static_assert(sizeof(&Extensions::base64_decode) > 0, "");
static_assert(sizeof(&Extensions::base64_encode) > 0, "");

如果您只想将功能纳入名称空间,则Maxim Egorushkin的出色答案是GO的方法。

有时,您需要获得全局名称空间的函数(因为它与同名的另一个函数相冲突(。在这种情况下,您将必须使用

namespace Extensions {
    #include "Base64.h"
}

然后使用特定平台的骇客来重命名库中的符号,以便链接器可以找到它们。请参阅Linux的答案。

看起来,在Windows上重命名符号的所有选项都应用于DLL。您将必须弄清楚姓名的内容。