Spezialisierung einer Funktionsschablone

Wenn man eine Funktionsschablone definiert hat, aber für eine bestimmte Kombination der Parameter eine andere Definition haben möchte, dann kann man für diese Kombination eine spezialisierte Version des template schreiben:
// Time-stamp: "(15.11.01 16:10) spectemplatef.cpp [Klaus Wachtler (aw38)]"

#include <iostream>

using namespace std;

// prüft, ob wert im Bereich [0..N-1] liegt, und
// liefert dementsprechend "ja" oder "nö" zurück:
template <class T, int N> const char *pruefe( T wert )
{
  return ( T(0)<=wert && wert<N ) ? "ja" : "nö";
}

// spezielle Version für T==unsigned und N==10:
template<> const char *pruefe<unsigned,10>( unsigned wert )
{
  return ( wert<10 ) ? "jau" : "nö";
}

int main( int nargs, char **args )
{
  // Aufruf der allgemeinen (generischen) Funktion:
  cout << pruefe<int,10>( 5 ) << endl;        //  5<10     "ja"
  cout << pruefe<int,10>( 15 ) << endl;       // 15<10     "nö"
  cout << pruefe<double,60>( 50.0 ) << endl;  // 50.0<60.0 "ja"

  // Aufruf der speziellen Version:
  cout << pruefe<unsigned,10>( 5u ) << endl;  // 5u<10u    "jau"

} // main( int nargs, char **args )



AnyWare@Wachtler.de