C++ template / テンプレート

激しく今更だとは思うけれども、メモ。ここを見て理解の助けにしてくれる人がいれば幸甚です。

C++のテンプレートとは、コンパイル時に複数のクラスなりメソッドなりを生成する機能である。例えば、

template 
class muneo{ 
 public: T varDisk;
...
 };

とあったら、

muneo dj;
muneo senator;

などと呼び出し元で宣言しておくことで、コンパイラが自動的に二つのクラス

class muneo{ public: int varDisk;  ... };
class muneo{ public double varDisk;  ... };

というのが自動的に生成されてリンクされるのだ。すげー。だから、今までクラスを作っていたのと同じように、

  • 宣言部をヘッダファイルに書く
  • 定義部を.cppファイルに書く
  • あとでg++とかでリンクする

ということをやっていると、その自動生成が混乱する(というか全くできない)ので、テンプレートは宣言と定義をひとつのファイルに書いて、呼び出し元のあるファイルできちんとincludeしておくことが必要である。

というのを今日初めて知った。恥ずかしながら。