Em alguns casos, pode ser necessário sobrecarregar uma função de modelo. Por exemplo, temos uma função de modelo que grava, no primeiro parâmetro, o valor do segundo parâmetro com ajuda da conversão explícita de tipos. Na linguagem MQL5, é proibida a conversão do tipo string para o tipo bool, nós podemos fazer isto sozinhos, para tal fim, criamos a sobrecarga da função de modelo. Por exemplo:



//+------------------------------------------------------------------+
//| Função de modelo |
//+------------------------------------------------------------------+
template<typename T1,typename T2>
string Assign(T1 &var1,T2 var2)
{
var1=(T1)var2;
return(__FUNCSIG__);
}
//+------------------------------------------------------------------+
//| Sobrecarga especial para o caso bool+string |
//+------------------------------------------------------------------+
string Assign(bool &var1,string var2)
{
var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0);
return(__FUNCSIG__);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
int i;
bool b;
Print(Assign(i,"test"));
Print(Assign(b,"test"));
}


Como resultado da execução deste código, vemos que, para o par int+string, foi usada a função de modelo Assign(), enquanto, após a segunda chamada, para o par bool+string, já foi usada a versão sobrecarregada.



string Assign<int,string>(int&,string)
string Assign(bool&,string)