模板怎样传递字符串参数?

hebboy 2003-07-14 03:58:05
我的模板类需要传递一个字符串作为参数,但是我试验了很多不行啊,求教大虾。
刚开始的时候,我这样写
template<CString strTest> class CMyTest{....};
然后再stdAfx.h中加入了
CMyTest<CString("kfsad")> g_myTest;
可是编译时报错说:
error C2993: 'strTest' : template parameter can never be initialized
error C2973: 'CMyTest' : invalid template argument 'strTest'

然后我就改成:
template<class TYPE, char* pchTest> class CMyTest{....};
再stdAfx.h中加入了
char* g_pchTest = "fdsjakfas";
CMyTest<g_pchTest> g_myTest;
然而编译说
error C2975: 'CMyTest' : invalid template argument for 'pchTest', constant expression expected
error C2079: 'g_myTest' uses undefined class 'CMyTest<&char * g_pchTest>'

然后我就改成
char g_pchTest[] = "fdsjakfas";
CMyTest<g_pchTest> g_myTest;
这两句如果不是加在stdafx.h中,就是可以用的,编译通过而且运行正常。但是现在我要求g_myTest在各个文件中都可以使用,这样当在其他文件中定义它时(使用extern)却会发生n多的错误。
请教如何达到此目的。

或者说如果想在类中定义一个类似g_myTest的成员变量,应该如何进行呢?根本问题还是如何传递一个字符串作为参数给模板。
...全文
131 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
glasswing 2003-07-14
  • 打赏
  • 举报
回复
不会吧?!!!

模板参数只能是以下3类:
1、有序型?包括char, short, int ..., enum
2、外部连接的对象指针
3、函数指针或类成员指针

有一点是可以肯定的,摸板参数必须是编译时已经确定的东西;但是为什么只能是这3类我不知道。
prog3k 2003-07-14
  • 打赏
  • 举报
回复
第一个版本的模板
template<CString strTest> class CMyTest{....};
CMyTest<CString("kfsad")> g_myTest;
这样定义应该是没有错的。可能是因为编译器的问题吧!
至于第二个版本
template<class TYPE, char* pchTest> class CMyTest{....};
char* g_pchTest = "fdsjakfas";
CMyTest<g_pchTest> g_myTest;
模板得不到第一个类型参数的值。也无法从你的定义中推断出来。
如果是这样定义的:
template<class T, int i=0> class CMyTest
{ T t;
public:
CMyTest(T t0):t(t0){}
...
};
那么你写
int i=0;
CMyTest myTest(i);
编译器就可以从构造函数的参数中推断出模板参数来!

其实模板的主要作用是用来传递类型参数的,最好把值参数放到构造函数里去!





64,682

社区成员

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

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