模板 class 特定于类型的函数
Template class type-specific functions
好的,所以我有这个模板 class,有点像单向列表。
template <typename T> List
它有这个内部函数 print
public:
void Print();
如您所料,它从头到尾打印列表内容;
但是,由于模板可以将 classes 作为 T,可以想象,对于这种情况,我将需要不同的 Print() 实现。比如我还有一个class点
class Point{
private:
int x, y;
public:
int getX();
int getY();
}
所以我想要专门为 Points 设计的 Print。我试过这个:
void List<Point>::Print();
但是编译器告诉我
prototype for void List<Point> Print() doesn match any in class List<Point>
虽然
candidates are: from List<T> [with T = Point] void List<Point>::Print()
对我来说,这似乎是相同的功能。怎么了?以及如何编写特定于 T 的模板 class 函数?
您使用 explicit template specialization 为特定类型专门化 Print
的行为。
例如,对于Point
:
template <> // No template arguments here !
void List<Point>::Print() // explicitly name what type to specialize
{
//code for specific Point Print behaviour..
}
However, as template can take classes as T, one can imagine, that i would need different implementations of Print() for that very cases
完全没有。您可以为每种类型的对象实现 Print
的单一实现 - 这就是模板功能强大的原因。
一种方法是在 Point
中定义流运算符 <<
,并在 List
中定义一个通用的 Print()
方法。这使得 Print
不只是 Point
可用。
更具普遍性。
好的,所以我有这个模板 class,有点像单向列表。
template <typename T> List
它有这个内部函数 print
public:
void Print();
如您所料,它从头到尾打印列表内容; 但是,由于模板可以将 classes 作为 T,可以想象,对于这种情况,我将需要不同的 Print() 实现。比如我还有一个class点
class Point{
private:
int x, y;
public:
int getX();
int getY();
}
所以我想要专门为 Points 设计的 Print。我试过这个:
void List<Point>::Print();
但是编译器告诉我
prototype for void List<Point> Print() doesn match any in class List<Point>
虽然
candidates are: from List<T> [with T = Point] void List<Point>::Print()
对我来说,这似乎是相同的功能。怎么了?以及如何编写特定于 T 的模板 class 函数?
您使用 explicit template specialization 为特定类型专门化 Print
的行为。
例如,对于Point
:
template <> // No template arguments here !
void List<Point>::Print() // explicitly name what type to specialize
{
//code for specific Point Print behaviour..
}
However, as template can take classes as T, one can imagine, that i would need different implementations of Print() for that very cases
完全没有。您可以为每种类型的对象实现 Print
的单一实现 - 这就是模板功能强大的原因。
一种方法是在 Point
中定义流运算符 <<
,并在 List
中定义一个通用的 Print()
方法。这使得 Print
不只是 Point
可用。
更具普遍性。