C++静态变量[重复]

问题描述 投票:0回答:1

我正在尝试设计仅标头的库,不幸的是它需要具有全局静态变量(在类中或在命名空间中)。

有没有什么方法或首选解决方案可以在保持仅标头设计的同时拥有全局静态变量?

代码是这里

c++ static
1个回答
11
投票

有几个选项。我想到的第一件事是 C++ 允许在多个翻译单元中定义类模板的静态数据成员:

template<class T>
struct dummy {
   static int my_global;
};

template<class T>
int dummy<T>::my_global;

inline int& my_global() {return dummy<void>::my_global;}

链接器会将多个定义合并为一个。但是

inline
本身也能提供帮助,而且这个解决方案要简单得多:

inline int& my_global() {
   static int g = 24;
   return g;
}

您可以将此内联函数放入头文件中并将其包含到许多翻译单元中。 C++ 保证此内联函数返回的引用始终引用同一个对象。确保该功能具有外部链接。

© www.soinside.com 2019 - 2024. All rights reserved.