1

私は本 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>一度だけインスタンス化する必要がありますが、この例でこの手法を使用する方法がわかりません。

4

1 に答える 1