24 3月 2017
24 3月 2017
//+------------------------------------------------------------------+ //| テンプレート関数 | //+------------------------------------------------------------------+ template<typename T1,typename T2> string Assign(T1 &var1,T2 var2) { var1=(T1)var2; return(__FUNCSIG__); } //+------------------------------------------------------------------+ //| bool+stringのための特別のオーバーロード | //+------------------------------------------------------------------+ string Assign(bool &var1,string var2) { var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0); return(__FUNCSIG__); } //+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { int i; bool b; Print(Assign(i,"test")); Print(Assign(b,"test")); }コード実行の結果、Assign()テンプレート関数はint+stringのペアで使用され、オーバーロードされたバージョンは2回目の呼び出しでbool+stringペアですでに使用されていることがわかります。
string Assign<int,string>(int&,string) string Assign(bool&,string)
template<typename T> T Func() { return (T)0; } void OnInit() { Func<double>(); // 明示的テンプレート関数の特殊化 }したがって、型定義は、呼び出しパラメータを使用するのではなく、型の明示的な指定によって実行されます。
ドキュメントを更新しました。