繁体   English   中英

有什么办法可以在标题中定义和声明一个外部对象?

[英]Any way I can define and declare an extern object in header?

我正在编写一个完全基于模板的库,所以我没有任何 cpp 文件。 现在我想声明一个全局变量,然后我意识到我无处可去。

如果我只是在标题中声明它,我会得到一个“多重定义”错误,如果我使用extern ,我必须创建一个 cpp 文件来真正声明它。

那么有什么方法可以在标题中声明一个全局变量?

PS 因为模板类中的静态成员可以(只能)在头文件中声明,它是如何工作的?

您可以使用宏进行单个声明,

#ifndef __usermacro
#define __usermacro
//Declare global variable
#else
//Declare extern 
#endif

正如@MM 所提到的,如果您使用的是C++17或更高版本,则可以使用inline声明。

但是,如果不是这种情况,您可以声明inline函数,该函数返回对static变量的引用,就像这样:

inline int& getData() {
    static int data;
    return data;
}

然后,在您的 .cpp 文件(以及标头中的任何函数体)中,您可以像int& data = getData()一样简单地调用它。

附带说明一下,如果您想确保全局对象只创建一次并且不会被意外复制,那么使用signleton可能更适合您。 全局变量更像是一种 c 风格,在 c++ 中并没有真正被认为是一种好的做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM