【C++】在头文件中定义全局变量的技巧

为了完成这个技巧,我们需要以下这个类,把它写在头文件中即可

template<typename T, int n>
class GlobalVar{
public:
	static T var;
};
template<typename T, int n>
T GlobalVar<T, n>::var;

这样,我们便拥有了任意变量上任意数量的变量,而且,在用的时候它们才出现。注意:这里所谓的“用的时候”指的是编译期做出的判断,而不是运行时的自动创建。也就是说,我们并不需要定义,直接拿来用就可以。

看一个例子,我们可以在一个编译单元中使用如下代码为变量赋值:
GlobalVar<int, 1>::var = 12345678;

而在另一个编译单元中读取该变量:

cout << GlobalVar<int, 0 >::var << endl;

详细解释:

在这里,我们利用了C++模板的一个特性——编译器保证具有相同模板参数的模板只实例化一次。也就是说,具有相同模板参数的GlobalVar中的静态变量var只被实例化一次。

如果我们想要定义另一个int型变量,只需要使用另一个n来实例化模板即可。

GlobalVar<int, 1>::var = 87654321;

此时,以上方法定义的全局变量在视觉上,不大像全局变量。但是大家可以使用宏定义等技巧来把它变得更像一点。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值