Sdílet prostřednictvím


Šablony funkcí

Šablony třídy definují skupinu souvisejících tříd, které jsou založeny na typech argumentů předaných při vytváření instance třídy.Šablony funkce jsou podobné jako šablony třídy, ale definují skupinu funkcí.Pomocí šablon funkce lze určit sadu funkcí, které jsou založeny na stejném kódu, ale pracují s různými typy nebo třídami.Následující šablona funkce zamění dvě položky:

// function_templates1.cpp
template< class T > void MySwap( T& a, T& b ) {
   T c(a); 
   a = b; 
   b = c;
}
int main() {
}

Tento kód definuje skupinu funkcí, které zamění hodnoty argumentů.Z této šablony lze vytvořit funkce, které budou provádět záměnu typů int, long a také uživatelem definovaných typů.Šablona funkce MySwap dokonce provede záměnu tříd, pokud je správně definován kopírovací konstruktor a operátor přiřazení těchto tříd.

Kromě toho šablony funkce zabrání v záměně objektů různých typů, protože kompilátor zná typy parametrů a a b v době kompilace.

Přestože lze tuto funkci pomocí ukazatelů typu void provést pomocí nešablonové funkce, verze se šablonou je typově bezpečná.Zvažte následující volání:

int j = 10;
int k = 18;
CString Hello = "Hello, Windows!";
MySwap( j, k );          //OK
MySwap( j, Hello );      //error

Druhé volání funkce MySwap vyvolá chybu v době kompilace, protože kompilátor nemůže funkci MySwap vygenerovat s parametry různých typů.Pokud byly použity ukazatele typu void, obě volání funkce se zkompilují správně, ale tato funkce nebude v době spuštění fungovat správně.

Explicitní určení argumentů šablony pro šablonu funkce je povoleno.Příklad:

// function_templates2.cpp
template<class T> void f(T) {}
int main(int j) {
   f<char>(j);   // Generate the specialization f(char).
   // If not explicitly specified, f(int) would be deduced.
}

Pokud je argument šablony explicitně zadán, jsou provedeny normální implicitní převody pro převod argumentu funkce na typ odpovídající parametrům šablony funkce.Ve výše uvedeném příkladu kompilátor převede znak (char j) na typ int.

Viz také

Referenční dokumentace

Vytváření instancí šablon funkce

Explicitní vytvoření instance

Explicitní specializace šablon funkcí

Další zdroje

Šablony