gpt4 book ai didi

c++ - 仅 header 库中的全局变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:05 24 4
gpt4 key购买 nike

我正在编写一个仅 header 的记录器库,我需要全局变量来存储当前记录器设置(输出标志、日志文件描述符等)。我的想法:

  • 我不能将变量声明为外部变量,因为我无权访问翻译单元来定义它们
  • 我不能只在标题中定义全局变量,因为它会导致多个定义
  • header 函数中的静态变量乍一看似乎很好,但事实是每个翻译单元都会有自己的“全局”变量拷贝,这很尴尬而且绝对是错误的
  • 我也不认为在我的情况下可以避免全局变量(即使那是我想做的),因为我显然必须在日志函数调用之间以某种方式存储设置

是否有任何我尚未考虑的变体?有没有其他方法可以让全局变量只使用标题

p.s. 我正在寻找 c99/c++11 兼容的解决方案以及可能的 gcc hacks (gcc >= 4.8)

最佳答案

一种方法是将选项隐藏在返回对局部静态选项的引用的函数后面。只要不违反 ODR(例如,通过某些依赖于宏的函数更改),就可以保证局部静态变量在您的程序中是唯一的。作为一个简单的例子,这可以在头文件中:

inline bool& someOption()
{
static bool opt = false;

return opt;
}

在翻译单元中:

someOption() = true;

将您的选项分组到一个结构中并将上述技术应用于该结构的实例可能会很有用。

请注意,此方法仅限于 C++(感谢 @rici 提供的提示),并且可能只能在使用 gcc 的 C 中偶然使用。

关于c++ - 仅 header 库中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51612866/

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