开发者

C++ static variable

I am trying to design header only library, which unfortunately needs to have global static variable (either in class or in namespace).

Is there any way or preferred solution to have global static variable while maintaining header only design?

The code is here开发者_Python百科


There are a couple of options. The first thing that came to my mind was that C++ allows static data members of class templates to be defined in more than one translation unit:

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;}

The linker will merge multiple definitions into one. But inline alone is also able to help here and this solution is much simpler:

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

You can put this inline function into a header file and include it into many translation units. C++ guarantees that the reference returned by this inline function will always refer to the same object. Make sure that the function has external linkage.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜