I C++ kan man göra templates som antingen är av typer eller av värden, t.ex.: template<typename T>"Värde-generics" i .net?
template<typename T>
class stack{
T pop();
void push(&T);
} ;
som kan användas som
stack<int> si;
Men man kan också istället för "typename" ange en specifik typ;
template<long max_rows>
class vector_n{
double x[max_rows];
void operator=(vector_n<max_rows> &v);
} ;
vector_n<5> x1;
vector_n<6> x2;
x1 = x2; //kompileringsfel!
(allt ovanstående helt otestat och med minst en liten bugg men skit samma)
Ett typexempel på vad man kan åstadkomma är metaprogrammering, där man t.ex. kan ha statiska beräkningar vid kompileringstillfället.
Kan man göra motsvarande i .net med generics?
Något i stil med:
Public Class test(of t, apa As long)
i vb.net?
Alltså: olika typer beroende på (t.ex.) ett numeriskt argument.Sv: "Värde-generics" i .net?
class stack{
T pop();
void push(&T);
} ;
I C# skriver du:
public class Stack<T>
{
T Pop() { ... }
void Push(T value) { ... }
}
Sedan:
new Stack<int>();
Exemplet med vektor går inte i C#..
C# fyra har inte stöd för metaprogrammering med ev kommer C# 5 ha det.. Microsoft sittar nu på detta.. där C# kompilatorn kommer skrivas om från C++ till C#..