techniki obliczeń na etapie kompilacji i tworzenia nowych typów.

W wielu językach programowania istnieją mechanizmy wspierające uogólnienia, m.in.: w C++ – szablony (templates). w D – szablony (templates) opisane w specyfikacji języka. w Java – typy generyczne (generic classes/type parameters). w C# – typy generyczne oparte na parametrach typów (type parameters). w Haskell – polimorfizm parametryczny (parametric polymorphism) w systemie typów języka. w TypeScript – typy generyczne (generics) w systemie typów języka. Przykłady C++ (szablony)template<typename To, typename From> To convert(From f);

void g(double d) { int i = convert<int>(d); // instancjacja: To=int, From=double char c = convert<char>(d); // instancjacja: To=char, From=double int(*ptr)(float) = convert; // dedukcja argumentów szablonu }D (szablony)T Square(T)(T t) { return t * t; }

void main() { import std.stdio; writefln("%s", Square(3)); // T jest dedukowane jako int writefln("%s", Square!(int)(3)); // instancjacja jawna }

Java (typy generyczne)/** Generic version of the Box class.