Ho una lunga dichiarazione di funzione template:Posso usare decltype() per evitare la duplicazione del codice nelle istanze esplicite del modello?
template <typename T> void foo(lots ofargs, goin here, andeven more, ofthese arguments, they just, dont stop);
senza sovraccarichi. e voglio istanziarlo esplicitamente. Posso scrivere (diciamo per T
= int
):
template void foo<int>(lots ofargs, goin here, andeven more, ofthese arguments, they just, dont stop);
Ma io davvero non voglio copiare quella lunga dichiarazione. Mi sarebbe piaciuto essere in grado di dire qualcosa del tipo:
template <typename T> using bar = decltype(foo<T>);
e poi:
template bar<int>;
Ora, la prima linea compila (GCC 4.9.3), ma la seconda linea doesn' t. Posso farlo funzionare in qualche modo? Oppure posso usare decltype()
in qualche altro modo per evitare di copiare la dichiarazione per l'istanziazione?
Nota: Ho utilizzato in modo inteso un esempio in cui non è possibile dedurre il tipo solo dagli argomenti, poiché desidero che qualsiasi soluzione supporti anche questo caso.
Sto modificando la domanda in modo da essere sicuro di non poter dedurre l'argomento del template per gli argomenti della funzione, che è quello a cui ero realmente interessato. Ho appena spruzzato un T t per una buona misura, non voleva dire perché tu lo usi ... Se la tua risposta è ancora pertinente, allora grande. – einpoklum
@ einpoklum Questo non è lontanamente chiaro dalla domanda, e perché pensi che la mia risposta non sia pertinente? – Barry
Non ho detto che era irrilevante, avevo solo il senso (prima del tuo ultimo montaggio) che potevi fidarti di più di quello che realmente sei. – einpoklum