常量模板参数类的写法

dyw 2007-09-12 08:21:57
例:
template<class T, class D, int token>
CObj
{
public:
enum { TOKEN = token }; // 传递常量,这样是否正确?

static CObj* Create();
public:
CObj();

private:
T * pT;
D iD;
};

求构造函数与Create函数的实现写法。谢谢!
...全文
218 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyw 2007-09-12
  • 打赏
  • 举报
回复
这也倒是个办法。多谢!
jxlczjp77 2007-09-12
  • 打赏
  • 举报
回复
试试typedef

typedef CObj<int,int,1> ID1_CObj;
typedef CObj<int,int,2> ID2_CObj;//这是两个不同的类

ID1_CObj* p=ID1_CObj::Create();
ID2_CObj* p=ID2_CObj::Create();
dyw 2007-09-12
  • 打赏
  • 举报
回复
多谢各位! 又出现一问:

下面这句中,1出现了两次:
CObj<int,int,1>* p=CObj<int,int,1>::Create();

显得有些繁琐,能否做到1只出现一次?

或者有其他更好的方案吗?我的目的只是传递一个固定的资源ID,觉得没有必要定义一个变量来接收资源ID的值,所以想用模板参数。
yixiao386 2007-09-12
  • 打赏
  • 举报
回复
enum { TOKEN = token };
正解
  • 打赏
  • 举报
回复
enum { TOKEN = token }; // 传递常量,这样是否正确?
正确
jxlczjp77 2007-09-12
  • 打赏
  • 举报
回复
template<class T, class D, int token>
class CObj
{
public:
enum { TOKEN = token };

static CObj* Create();
public:
CObj();

private:
T * pT;
D iD;
};

template<class T, class D, int token>
CObj<T,D,token>::CObj()//:pT(new T)
{
//...
}
template<class T, class D, int token>
CObj<T,D,token>* CObj<T,D,token>::Create()
{
//...
return 0;
}

int main()
{
CObj<int,int,1>* p=CObj<int,int,1>::Create();
return 0;
}

64,282

社区成员

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

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