C++中如何在类外定义模板类内的模板函数?
请问如下代码中如果类A中的Test函数要在类内声明,而在类外定义,定义语法应该是怎么样的?(就象现在注释掉的部分要实现的那样,但现在老是出错)
template <class T>
class A
{
public:
template <class T1>
void Test(T1 p){};
T a;
};
/*
template <class T,class T1>
void A<T>::Test(T1 p)
{
}
*/
int main(int argc, char* argv[])
{
A<int> a;
a.Test(12);
return 0;
}
问题点数:20、回复次数:6Top
1 楼lvfengxun(lfx)回复于 2001-07-23 14:29:56 得分 0
关注Top
2 楼comet(黄昏十二乐章)回复于 2001-07-23 14:38:25 得分 0
全部类的声明、定义代码放在 .h 头文件中。Top
3 楼boodweb(TTT)回复于 2001-07-23 22:31:25 得分 0
To comet:
已经这样做了,以上所有代码都在一个.cpp文件里Top
4 楼qingsong99(青松)回复于 2001-07-24 00:09:14 得分 0
将第五行去掉,并把第六行的{}去掉。
即:
template<class T>
class A
{
public:
void Test(T p);
T a;
};
template<class T>
void A<T>::Test(T p)
{
.....
}Top
5 楼xiterator(xi)回复于 2001-07-24 08:34:43 得分 20
目前的大多数compiler还不能解析在类的声明之外定义的member template。C++ standard 对于在类定义之外定义member template 的标准写法如下(不过在VC++6.0下无法编译通过):
template <class T> template <class T1>
void A<T>::Test(T1 p)
{ }
Top
6 楼boodweb(TTT)回复于 2001-07-24 22:25:09 得分 0
To qingsong99:
这样的话Test的参数在类定义的时候就确定了,不能达到函数模板的要求
To xiterator:
那请问知道现在有什么编译器可以识别吗Top




