Seite 1 von 1

C++ Template-Funktionen

Verfasst: 09.04.2009, 14:16
von EyDu
Hey ho,
ich hab' glaub ich eine ganz einfache frage, ich finde nur mit Google irgendwie die Antwort nicht. Ich habe eine Funktion der Form:

Code: Alles auswählen

template<int _k> int foo() {
   //do something useful
}
Ich könnte die Funktion nun natürlich mit

Code: Alles auswählen

foo<3>()
aufrufen. Ich bräuchte jetzt aber, weil es so schön praktisch wäre, einen Weg aus "foo<3>()" ein "foo3()" zu machen. Bei Klassen ginge das natürlich mit einem einfach "typedef", nur hinter die Funktionen komme ich gerade nicht. Ein

Code: Alles auswählen

#define foo3 foo<3>
würde ich nur sehr ungerne machen.

Viele Grüße,
Sebastian

Re: C++ Template-Funktionen

Verfasst: 09.04.2009, 14:22
von Schrompf
Wie wär's mit einer inline-Wrapperfunktion? In Release-Builds produziert die verlässlich keinen weiteren Code, und Du kannst sie nennen, wie Du magst. ob das mit typedef geht, weiß ich gar nicht... ich bezweifle es.

Re: C++ Template-Funktionen

Verfasst: 09.04.2009, 14:40
von kimmi
Das einzige, was mir dazu einfällt wäre entweder ein Wrapper mit entsprechenden Namen oder sowas ( ungetestet ):

Code: Alles auswählen

template<int _k> int foo() 
{
  //do something useful
}

struct foo3
{
  enum three { arg = 3 };
  foo3()
  {
    foo<foo3::three>();
  }
};

// Aufruf
foo3 exec; 
Einen typedef auf eine Funktion wird IMHO schwer, ich habe auch in Google nichts brauchbares finden können. Fairerweise muß ich aber auch zugeben, daß ich den c++ Standard nicht im Kopf habe :).

Gruß Kimmi

Re: C++ Template-Funktionen

Verfasst: 09.04.2009, 14:55
von EyDu
Schon mal vielen Dank für die schnellen Antworten, das geht wirklich fix hier :-)

Was bei mir noch ein wenig problematisch ist, dass meine Funktionen natürlich noch ein paar Parameter haben, die ich ungerne für jede Ausprägung hinschreiben würde. Eure Lösungen funktionieren und es sind auch nur drei/vier Ausprägungen, aber natürlich würde ich es lieber allgemeiner lösen. Diese Programmiererehre eben :lol:

Falls jemand eine allgemeine Lösung parat hat bin ich natürlich dran interessiert, mein eigentliches Problem ist jetzt im Prinzip gelöst. Ich werde heute abend selber noch einmal suchen und bei Erfolg ggf. noch berichten.

Bis dann,
Sebastian

Re: C++ Template-Funktionen

Verfasst: 09.04.2009, 17:56
von jgl
Blöde Frage, aber das ginge nicht?

Code: Alles auswählen

	template<int k> int foo()
	{
		return k*k;
	}

	int foo3()
	{
		foo<3>();
	}
Aber du willst das bestimmt allgemeiner haben, oder?

Re: C++ Template-Funktionen

Verfasst: 09.04.2009, 18:12
von Aramis
Das ist genau das, was Thomas weiter oben auch schon vorgeschlagen hat. Meiner Meinung nach ist das eine eher unsaubere Methode weil foo3() dann strenggenommen kein (compiletime-) Alias für foo<3> mehr ist.

Wenn du wirklich volle Flexibilität willst, könntest du auf Funktoren setzen. Z.B.

Code: Alles auswählen

template <int TN>
struct sqr
{
   int operator() (int f) {
      return f*f*TN; 
   }
};

typedef  sqr<3> sqr3;

Re: C++ Template-Funktionen

Verfasst: 10.04.2009, 13:12
von kimmi
Funktoren kämen dem gewünschten Verhalten wahrscheinlich am nächsten, da sie wirlich einen funktionsspezifischen Typedef darstellen.

Gruß Kimmi