class DoubleVector5
{ // ...
private:
double elements[5];
};class IntVector3
{ // ...
private:
int elements[3];
};
template <class Vector>
struct VectorInfo
{
// nachfolgend Aufzählungskonstante statt static
// const bool, da für letzteres immer noch einige
// Compiler keine Initialisierung innerhalb der
// Klassendefinition erlauben
enum { available = false };
};
template <>
struct VectorInfo<DoubleVector5>
{
enum { available = true };
typedef double ElementType;
enum { size = 5 };
};
template <>
struct VectorInfo<IntVector3>
{
enum { available = true };
typedef int ElementType;
enum { size = 3 };
};
// auf Meta-Information zugreifen:
if (VectorInfo<DoubleVector5>::available)
cout << VectorInfo<DoubleVector5>::size << endl;
if (VectorInfo<IntVector3>::available)
cout << VectorInfo< IntVector3>::size << endl;
// für den elementaren Typ int ist keine Meta
//information definiert, daher keine Ausgabe
if (VectorInfo<int>::available)
cout << VectorInfo<int>::size << endl;
Dieser Text ist der Zeitschriften-Ausgabe 09/2001 von iX entnommen.
iOS, Android, Windows Phone 7 und HTML5 - das neue Sonderheft von heise Developer führt Einsteiger und Profis in die Programmierung mobiler Geräte ein.