请问如何初始化模版类中的静态成员变量?

avisnet 2008-07-26 06:46:21
在一个CPP文件中定义了下面这样一个类:
template <int I> class Test
{
union Obj
{
union Obj *next;
char data[1];
};

static Obj* freeList[16];
};[code]

这用下面的方法初始化freeList:
[code=C/C++]template <int I>
union Test<I>::Obj* Test<I>::freeList[16] = { 0 };


请问如何正确初始化这个成员?
...全文
455 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xins0123 2011-10-23
  • 打赏
  • 举报
回复
//-- a.h-----------------------
template< typename T >
class A
{
static T t;
};

template< typename T >
T A<T>::t;

//-- b.h --------------------------
class B : public A<B>
{
}

-- 这个基类的静态变量在main 函数之前会给创建 吗?
niu05500230 2010-08-23
  • 打赏
  • 举报
回复
这样初始化之后,是不是模板没实例化一次就产生一个静态成员,能保证要全局只有一个静态成员(不管模板实例化几次),如果不能,那么怎么才能使全局只有一个静态成员呢?
ttkk_2007 2008-07-26
  • 打赏
  • 举报
回复

template <int I>
class Test
{
public:
union Obj
{
union Obj *next;
char data[1];
};

static Obj* freeList[16];
};

template <int I>
typename Test<I>::Obj* Test<I>::freeList[16] = { 0 };
tobylee999 2008-07-26
  • 打赏
  • 举报
回复
三楼应该是对的。模板静态成员的实例化需要逐个类型来做,这点比较烦...
yydrewdrew 2008-07-26
  • 打赏
  • 举报
回复
template <int I> 
class Test
{
public:
union Obj
{
union Obj *next;
char data[1];
};

static Obj* freeList[16];
};

template <int I>
Test<I>::Obj* Test<I>::freeList[16] = { 0 };
wangdeqie 2008-07-26
  • 打赏
  • 举报
回复
试试memset()
K行天下 2008-07-26
  • 打赏
  • 举报
回复
template <int I> typename Test <I>::Obj* Test <I>::freeList[16] = { NULL };
zhkefa 2008-07-26
  • 打赏
  • 举报
回复
是的,我在前面的回答不正确,谢谢5楼的兄台提醒,,
wangjs720 2008-07-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhkefa 的回复:]
C/C++ code
template <int I> class Test
{
union Obj
{
union Obj *next;
char data[1];
};

static Obj* freeList[16] = {0};
};




应该这样吧,试试,,
[/Quote]

这样是不行的,只有整型值(int, char, short,...)才可以直接初始化。
zhkefa 2008-07-26
  • 打赏
  • 举报
回复

static Obj* freeList[16] = {0};
wangjs720 2008-07-26
  • 打赏
  • 举报
回复
template <int I>
typename Test<I>::Obj* Test<I>::freeList[16] = { 0 };

用typename关键字告诉编译器Obj是一个类型。
zhkefa 2008-07-26
  • 打赏
  • 举报
回复

template <int I> class Test
{
union Obj
{
union Obj *next;
char data[1];
};

static Obj* freeList[16] = {0};
};


应该这样吧,试试,,
KimenWu 2008-07-26
  • 打赏
  • 举报
回复
你写的这个模板类,看了有点晕。仔细看一下模板类的定义。
模板类静态变量的初始化和一般的类是一样的。

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧