能力值:
( LV4,RANK:50 )
|
-
-
26 楼
是啊
所以现在就是看有没有办法不冲突
#ifndef是解决不了的,因为冲突可能是链接冲突而不是编译冲突,全局变量被多实例化时,#ifndef没用
如果实在搞不定,只能h+cpp了
现在是在找方法
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
template<class T>
T &GetVar()
{
static T var;
return var;
}
|
能力值:
( LV4,RANK:50 )
|
-
-
28 楼
为啥行?
我里面N个函数,共享使用M个全局变量,模板怎么解决呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
研究下wtl的源码,它的所有文件都是h文件,里面貌似用了大量模版.
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
T &GetVar()
{
static T var;
return var;
}
比如(举个例子)你的全局变量是int类型的话,那么就用“GetVar<int>()”来代指你的全局变量,只要模板函数名和类型一致,那么就是同一个变量。
以此类推,可以建N个函数来实现N个全局变量。
觉得“GetVar<int>()”别扭可以define一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
这个方法是对的 怎么没人关注?
__declspec(selectany)可修饰任何变量
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
既然是用C++为什么不用类呢。
楼上菜鸟兄说的办法是可以的吧。
通过类的static变量来实现共享。
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
这是确实是对的
不用修饰就可以了吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
不用修饰不行 会生成多份
atl用的就是我写的这种方式
LZ说不行 我就笑了
|
能力值:
( LV4,RANK:50 )
|
-
-
35 楼
不好意思,我只看了前面几行,用了static
我再仔细看看,试一试
|
能力值:
( LV4,RANK:50 )
|
-
-
36 楼
我主功能用到了类,但类里有些数据实现成全局变量,以优化性能
如有些东西经过很复杂的很耗时的过程得来的,再次实例化对象时,可直接重用,而不需要再做一次,大概就是这个意思:
|
能力值:
( LV4,RANK:50 )
|
-
-
37 楼
我刚查了下这种用法,真心就是我想要的啊
谢谢了
对了,好像不用这么复杂,直接这样就行:
__declspec(selectany) DWORD g_dwXXX = -1;
是不是啊,不需要放到类里再static,反正我是编译且链接过了,没冲突
对了,变量名有解了
函数是不是无解?它会生成多份实例
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
但是这种方法只能在win下用
所有还是用单例比较好
|
能力值:
( LV4,RANK:50 )
|
-
-
39 楼
呵呵,没事,反正我们的东西只在win下使用
非常感谢
|
能力值:
( LV4,RANK:50 )
|
-
-
40 楼
知道了,全部实现为class的static成员函数,就不会生成多份了
|
|
|