首页
社区
课程
招聘
[讨论]一定要在头文件中申明全局变量或实现函数,而且要保持唯一性,应该怎么办?
发表于: 2013-10-29 11:44 14413

[讨论]一定要在头文件中申明全局变量或实现函数,而且要保持唯一性,应该怎么办?

2013-10-29 11:44
14413
收藏
免费 0
支持
分享
最新回复 (39)
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
26
是啊
所以现在就是看有没有办法不冲突
#ifndef是解决不了的,因为冲突可能是链接冲突而不是编译冲突,全局变量被多实例化时,#ifndef没用

如果实在搞不定,只能h+cpp了
现在是在找方法
2013-10-29 15:05
0
雪    币: 209
活跃值: (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
template<class T>
T &GetVar()
{
    static T var;

    return var;
}
2013-10-29 15:07
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
28
为啥行?
我里面N个函数,共享使用M个全局变量,模板怎么解决呢?
2013-10-29 15:07
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
研究下wtl的源码,它的所有文件都是h文件,里面貌似用了大量模版.
2013-10-29 15:07
0
雪    币: 209
活跃值: (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
T &GetVar()
{
    static T var;

    return var;
}


比如(举个例子)你的全局变量是int类型的话,那么就用“GetVar<int>()”来代指你的全局变量,只要模板函数名和类型一致,那么就是同一个变量。

以此类推,可以建N个函数来实现N个全局变量。

觉得“GetVar<int>()”别扭可以define一下。
2013-10-29 15:13
0
雪    币: 962
活跃值: (1686)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
这个方法是对的 怎么没人关注?
__declspec(selectany)可修饰任何变量
2013-10-29 15:23
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
既然是用C++为什么不用类呢。

楼上菜鸟兄说的办法是可以的吧。

通过类的static变量来实现共享。
2013-10-29 15:28
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
这是确实是对的

不用修饰就可以了吧?
2013-10-29 15:30
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
不用修饰不行 会生成多份

atl用的就是我写的这种方式

LZ说不行 我就笑了
2013-10-29 15:59
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
35
不好意思,我只看了前面几行,用了static
我再仔细看看,试一试
2013-10-29 16:08
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
36
我主功能用到了类,但类里有些数据实现成全局变量,以优化性能
如有些东西经过很复杂的很耗时的过程得来的,再次实例化对象时,可直接重用,而不需要再做一次,大概就是这个意思:
2013-10-29 16:09
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
37
我刚查了下这种用法,真心就是我想要的啊
谢谢了

对了,好像不用这么复杂,直接这样就行:
__declspec(selectany) DWORD g_dwXXX = -1;
是不是啊,不需要放到类里再static,反正我是编译且链接过了,没冲突

对了,变量名有解了
函数是不是无解?它会生成多份实例
2013-10-29 16:34
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
但是这种方法只能在win下用
所有还是用单例比较好
2013-10-29 16:49
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
39
呵呵,没事,反正我们的东西只在win下使用
非常感谢
2013-10-29 17:02
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
40
知道了,全部实现为class的static成员函数,就不会生成多份了
2013-10-29 17:24
0
游客
登录 | 注册 方可回帖
返回
//