テンプレートインスタンス化の際には、型と名前が一致することを目安に、どのテンプレートがインスタンス化または再インスタンス化される必要があるか決定されます。したがって、局所型がテンプレート引数として使用された場合には重大な問題が発生する可能性があります。自分のコードに同様の問題が生じないように注意してください。次に例を示します。
array.h
template <class Type> class Array {
Type* data;
int size;
public:
Array(int sz);
int GetSize();
};
array.cc
template <class Type> Array<Type>::Array(int sz)
{size = sz; data = new Type[size];}
template <class Type> int Array<Type>::GetSize()
{return size;}
file1.cc
#include "array.h"
struct Foo {int data;};
Array<Foo> File1Data(10);
file2.cc
#include "array.h"
struct Foo {double data;};
Array<Foo> File2Data(20);
|
file1.cc の中に登録された Foo 型は、file2.cc の中に登録された Foo 型と同じではありません。局所型をこのように使用すると、エラーと予期しない結果が発生することがあります。