5

わかりましたので、このテンプレート クラスがあります。これは、一方向リストのようなものです。

template <typename T> List

そして、この内部関数 print があります

public:
void Print();

ご想像のとおり、リストの内容を最初から最後まで出力します。ただし、テンプレートは T としてクラスを取ることができるため、まさにその場合に Print() の異なる実装が必要になることが想像できます。たとえば、別のクラス Point があります

class Point{
 private:
  int x, y;
 public:
  int getX();
  int getY();
}

だから私はポイントのために特別に設計されたプリントが欲しい. 私はこれを試しました:

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 固有のテンプレート クラス関数をどのように記述すればよいでしょうか。

4

2 に答える 2

7

明示的なテンプレートの特殊化を使用して、特定の型の動作を特殊化しPrintます。

たとえば、次の場合Point:

template <> // No template arguments here !
void List<Point>::Print() // explicitly name what type to specialize
{
  //code for specific Point Print behaviour..
}
于 2016-11-21T14:14:05.983 に答える
0

ただし、テンプレートはクラスを T として受け取ることができるため、まさにその場合に Print() の異なる実装が必要になることが想像できます。

全くない。すべてのタイプのオブジェクトに対して単一の実装を行うことができますPrint。これが、テンプレートが強力な理由です。

必要なことを行う 1 つの方法は、 でストリーム オペレータを定義し、<<PointジェネリックPrint()メソッドを使用することListです。これによりPrintPoint.

より一般的なftw。

于 2016-11-21T14:57:02.117 に答える