Supponiamo che io ho una classe con la seguente firma:In che modo enable_if una classe con argomenti modello variadic?
template <typename T, typename... Args>
class A;
Ma come questo si comporta classe dovrebbero dipendere da qualche altro parametro, diciamo che è il valore di T::value
:
template <typename T, typename... Args, typename Enable>
class A;
template <typename T, typename... Args, typename = typename std::enable_if<T::value>::type>
class A
{
// do something
};
template <typename T, typename... Args, typename = typename std::enable_if<!T::value>::type>
class A
{
// do something else
};
int main() { return 0; }
Tuttavia, questo programma ha pronunciato la seguente errore:
prog.cpp:6:11: error: parameter pack ‘Args’ must be at the end of the template parameter list class A;
ho faticato a trovare una buona fonte di informazioni sull'uso di 012.per selezionare classi con modelli variadic. L'unica domanda che ho trovato è questo:
How to use std::enable_if with variadic template
Ma, nonostante il nome, questa domanda e le sue risposte non sono molto aiuto. Se qualcuno potrebbe fornire o collegare una guida su come questo dovrebbe essere affrontato e perché sarebbe apprezzato.
Ho provato a dichiarare 'A a;', ma il compilatore continuava a dirmi: "istanziazione implicita di template non definito" detail :: A_impl 'Apprezzerei molto se riesci a spiegarlo un po '. (Scusa, sto ancora imparando queste cose) –
astroboylrx
@astroboylrx Per far funzionare questo, il primo digitare la lista dei parametri del template di 'A' deve avere un membro' value', perché il check-in 'enable_if' dipende da questo.Abbiamo usato' float' invece. Senza il membro 'value', i controlli in' enable_if' non sono validi, quindi il modello principale di 'A_impl' (non ha implementazione, è solo dichiarato) viene selezionato e si ottiene l'errore. – jrok
Ci scusiamo per la mia risposta in ritardo. Grazie per questa spiegazione. Ora lo vedo. :-) – astroboylrx