私は本 C++ 入門書第 5 版を読んでいて、これを手に入れました。
テンプレートの使用時にインスタンス化が生成されるという事実 (§ 16.1.1、p. 656) は、同じインスタンス化が複数のオブジェクト ファイルに表示される可能性があることを意味します。別々にコンパイルされた 2 つ以上のソース ファイルが同じテンプレート引数で同じテンプレートを使用する場合、それらの各ファイルにそのテンプレートのインスタンス化があります。
私はそれが正しく得られたかどうかわからないので、ここに例を作りました:
//test_tpl.h
template<typename T>
class Test_tpl
{
public:
void func();
};
#include "test_tpl.cpp"
//test_tpl.cpp
template<typename T>
void Test_tpl<T>::func(){}
//a.cpp
#include "test_tpl.h"
// use class Test_tpl<int> here
//b.cpp
#include "test_tpl.h"
// use class Test_tpl<int> here
上記の段落によると、この例では、Test_tpl がTest_tpl<int>
2 回インスタンス化されています。明示的なインスタンス化を使用する場合、Test_tpl<int>
一度だけインスタンス化する必要がありますが、この例でこの手法を使用する方法がわかりません。