Funkce šablon
Třída šablony definovat řady souvisejících tříd, které jsou založeny na typu argumenty při vytváření instance třídy.Funkce šablony jsou podobné šablony třídy, ale definovat řady funkcí.Funkce šablony můžete určit sadu funkcí, které jsou založeny na stejný kód, ale aktu na různé typy nebo třídy.Následující funkce šablony swapy 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 řadu funkcí, které zaměnit hodnoty argumentů.Z této šablony můžete generovat funkce, které budou zaměnit int a dlouhý typů a také uživatelem definované typy.MySwapbude i zaměnit tříd-li kopírovat konstruktor třídy a operátor přiřazení správně definována.
Navíc funkce šablony zabrání odkládání objektů různých typů, protože kompilátor zná typy a a b parametrů v čase kompilace.
Přestože tuto funkci nelze provést pomocí funkce nontemplated, pomocí ukazatele typu void verze šablony je typesafe.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ý MySwap volání vyvolá chybu v době kompilace, protože kompilátor nemůže generovat MySwap funkci s parametry různých typů.Pokud byly ukazatele typu void, jak by správně sestavit volání funkce, ale funkce by v době spuštění fungovat správně.
Explicitní specifikace šablony argumenty funkce šablony 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.
}
Když šablonu argument explicitně zadán, jsou normální implicitní převody v argumentu funkce převést na typ odpovídající parametry funkce šablony.Ve výše uvedeném příkladu kompilátor převede (char j) zadejte int.
Viz také
Referenční dokumentace
Funkce vytváření instance šablony
Explicitní specializace funkce šablony