テンプレート関数の本体は、実際にそれを使用するファイルに含める必要があることを読みました (つまり、宣言だけでは不十分です)。
ヘッダー ファイルでテンプレート関数を定義するとします。
//someheader.h
#ifndef SOME_H
#define SOME_H
template<class T>
void MyTemplateFunc(T *In, ...)
{
//definitions here
}
#endif
実際には、2 つの異なる cpp ファイルで使用できます。
//file1.cpp
#include "someheader.h"
void f1()
{
//some code
MyTemplateFunc<int>(Some_int_Pointer);//use template here
}
と
//file2.cpp
#include "someheader.h"
void f2()
{
//some code
MyTemplateFunc<float>(Some_float_Pointer);//use template here
}
今、私は文句を言っているわけではありません (理解しようとしているだけです) が、この場合、コンパイル/リンク エラーが発生しないのはなぜですか? 二重インクルージョン ガードにより、「someheader.h」が cpp ファイルの 1 つにのみインクルードされるため、他の cpp ファイルがテンプレート定義を「見る」ことができないと不平を言うことになります。
ここで何が欠けていますか?
ありがとう
ベニー