函数模板能被定义在类中吗?

VincintCao 2002-12-06 04:41:06
template<class T1,class T2>
void test(T1 a,T2 b)
{
}
如果上面的函数是全局的,下面的调用
test<int,char>(0,'c');
就可以编译通过,如果上面的函数是类的成员,
那么即使在该类的另一成员函数内调用
test<int,char>(0,'c');
也会编译出错。用static也错,是什么原因?
...全文
53 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
deanjiang 2002-12-07
你是不是用的VC6?建议不要在VC6下用成员模板,VC6不支持。MSDN中明确写的。到了VC7就没问题了
回复
lx_cyh 2002-12-07
TCPL 指<< THE C++ PROGRAMMING LANGUAGE>> 一书
回复
VincintCao 2002-12-07
谢谢。
回复
VincintCao 2002-12-06
如果我用自己的类的话,系统会自动推导吗?我如果不显示说明的话,会出现如下错误:
E:\software\implement\MTConsole\MTConsoleDlg.cpp(875) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1794)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
Error executing cl.exe.
显式说明的话,也会出错,不知道哪里出的问题。
回复
VincintCao 2002-12-06
TO:liushmh(c++)
那如果我用自己的类,或者是别的vector,deque等呢?
回复
liushmh 2002-12-06
t.test<int>(i);
这种东西,不是在这样用的,在编译的时候,系统会自动推导i是int型的,所以F就是int型.
template <typename F>
test<int>(F m)
{

}
这个叫做模板的特化,你怎么能把它放到调用里面。
回复
VincintCao 2002-12-06
To:liushmh(c++)
你的代码的确可以通过,但是为什么把你的代码中的
t.test(i);
改成t.test<int>(i);
反而通不过了呢?

To:lx_cyh(hi)
什么是TCPL
回复
我不懂电脑 2002-12-06
class tt
{
public:
template <class F>
void test(F m)
{cout<< m << endl;}
};

int main()
{
tt t;
int i = 9;
t.test(i);
system("PAUSE");
return 1;
}
回复
lx_cyh 2002-12-06
可以。参见TCPL
回复
liushmh 2002-12-06
可以。
class tt
{
public:
template <typename F>
void test(F m)
{cout<< m << endl;}
};

int main()
{
tt t;
int i = 6;
t.test(i);
system("PAUSE");
return 1;
}
回复
Firstbyte 2002-12-06
你的class 不是类的意思 和typename 意思一样的!!!
回复
VincintCao 2002-12-06
?我试过的,除非我的眼睛背叛了我的心!
回复
liushmh 2002-12-06
你好象没有这样做 ?????
回复
相关推荐
发帖
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2002-12-06 04:41
社区公告
暂无公告