次のような明示的なインスタンス化の助けを借りて、cpp ファイルに実装されている関数テンプレートがあるとします。
関数.h
template<typename T> void function(T val);
関数.cpp
#include "function.h"
template<typename T> void function(T val) { /* do something */ }
template void function<double>(double val);
次のように、 function.hを含むメイン ファイルで関数を呼び出すことができるようになりました。
double val = 1.0;
function(val);
さらに、次のように実装されたクラスがあると仮定します。
data.h
class Data
{
private:
double mVal;
public:
Data(double val) { mVal = val; }
operator double () { return mVal; }
};
次のコードでは、リンカー エラー LNK2019: unresolved external (Visual Studio 2010) が発生します。
Data a(1.0);
function(a);
次の式のいずれかを使用して、 to function()を指定できます。
function<double>(a);
function(double(a));
...
しかし、 function(a)を単に呼び出すことができないのはなぜですか? function()をデータ型で明示的にインスタンス化せずにそれを達成するための他の解決策はありますか?