【发布时间】:2012-11-19 10:25:37
【问题描述】:
这是我为理解这个概念而编写的代码。代码很好,可以运行。
我不明白为什么需要标记线?
template <class T>
class D
{
public :
template <class P> //<------------------Why is this needed ? --------------
friend void print(D <P> obj);
};
template <class T>
void print(D<T> obj)
{std::cout<<sizeof(T);};
int main()
{
D <char>obj3;
print(obj3);
return 0;
}
或者换句话说为什么以下不运行?
template <class T>
class D
{
public :
friend void print(D <T> obj);
};
【问题讨论】:
-
该行表明
print()本身就是一个template函数。 -
为什么在课堂上需要这个?模板函数在类外有一个完整的定义,加上实例化是在知道数据类型的情况下完成的..
-
按照模板函数的语法,在声明模板函数之前必须这样写...
template <class P> friend void print(D <P> obj);我想这一定是一个原因。