Š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 můžete generovat funkce, které prohodí int
typy a long
také uživatelem definované typy. Š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.
Šablona funkce vám navíc zabrání v prohození objektů různých typů, protože kompilátor zná typy parametrů a b v době kompilace.
Přestože lze tuto funkci pomocí ukazatelů typu void provést pomocí nešablonové funkce, verze s šablonou je typově bezpečná. Vezměte v úvahu 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. V předchozím příkladu kompilátor převede j
na typ char
.
Viz také
Šablony
Vytváření instancí šablon funkce
Explicitní vytvoření instance
Explicitní specializace šablon funkcí
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro