実体化は、インスタンシエーションとかインスタンス化とかとも呼ばれたりする。
テンプレートクラスのメソッドや普通のクラスのテンプレートメソッドの宣言を .h、実装を .cpp ファイルに分けて書いたりすると、ちょっと困ったことが起こる場合がある。そのメソッド(関数)の実体が生成されず、リンク時に、そんな関数はないぞー、とエラーになる。
他の .cpp ファイルでしか、ある上記のメソッドを使っていない場合、.h ファイルは勿論インクルードするが、その中には実装はないので、そのメソッドに対する実際のコードを生成はできない。その実装が含まれた .cpp ファイルの中でしかコードを生成できない、ということ。
.cpp ファイル内にダミーのグローバルメソッドでも作って、その中で そのメソッドを呼ぶコードを書いたりしてもいいのかもしれないが、一応きちんとした書き方がある。
template NankaTemplateClass
や
template NankaClass::TemplateMethod
と書いておけば、そこで実際のコードが生成されて、リンクも成功する、ということらしい。template の後ろに<> を書かないのがミソ。
もちろん、.h の中に、宣言も実装も書いておけば、こういう苦労はいらないのだが。インクルードの依存関係とかも考えると、実装を .cpp に分けたいこともあるだろうし、覚えておいた方がいいかと思われる。
C++ で普通にプログラミングしている人には、基本中の基本なんだろうか...
あ、テンプレートクラスの場合は、個別のメソッドごとではなくて、クラス丸ごと実体化すればいいのかな。