Ich habe eine lange Vorlage Funktionsdeklaration:Kann ich declltype() verwenden, um Code-Duplizierung bei expliziten Template-Instanziierungen zu vermeiden?
template <typename T> void foo(lots ofargs, goin here, andeven more, ofthese arguments, they just, dont stop);
ohne Überlastung. und ich möchte es explizit instanziieren. Ich kann (für T
sagen = int
) schreiben:
template void foo<int>(lots ofargs, goin here, andeven more, ofthese arguments, they just, dont stop);
Aber ich will wirklich nicht, dass lange Erklärung kopieren. Ich hätte mochte der Lage sein, zu sagen, so etwas wie:
template <typename T> using bar = decltype(foo<T>);
und dann:
template bar<int>;
nun die erste Zeile kompiliert (GCC 4.9.3), aber die zweite Linie doesn‘ t. Kann ich es irgendwie funktionieren lassen? Oder kann ich decltype()
auf andere Weise verwenden, um das Kopieren der Deklaration für die Instanziierung zu vermeiden?
Hinweis: Ich habe absichtlich ein Beispiel verwendet, in dem Sie den Typ nicht nur aus den Argumenten ableiten können, da ich jede Lösung auch in diesem Fall unterstützen möchte.
Ich bearbeite die Frage, um sicherzustellen, dass Sie das Template-Argument für die Funktionsargumente nicht ableiten können, woran ich eigentlich interessiert war. Ich streute einfach ein T t für ein gutes Maß, nicht gemeint damit Sie es benutzen ... Wenn Ihre Antwort noch relevant ist, dann großartig. – einpoklum
@einpoklum Das ist nicht im Entferntesten klar von der Frage, und warum denkst du, dass meine Antwort nicht relevant ist? – Barry
Ich habe nicht gesagt, dass es irrelevant ist, ich hatte nur den Sinn (vor deinem letzten Schnitt), dass du dich vielleicht mehr darauf verlässt als du tatsächlich bist. – einpoklum