2015-03-19 14 views
13

ho visto questa espressione nella pagina 189 del libro "Effective C++ moderna":Che cosa significa "typename =" nei parametri del template?

template<typename T, 
      typename = typename std::enable_if<condition>::type> 
    explicit Person(T&& n); 

Mi chiedo solo quello che fa la parte "typename =" significare. Sembra certamente un argomento predefinito per un parametro del modello. Ma non ti serve qualcosa come "typename some_name = ..." in un argomento predefinito? Non esiste un nome per il secondo argomento del modello e in questo caso non vedo il secondo argomento del modello utilizzato.

P.S. Quando eseguo una ricerca su google (o qualsiasi altro motore di ricerca) per una risposta, il segno di uguale viene sempre scartato, e ciò rende semplicemente impossibile trovare una risposta ...

risposta

12

Questo è un parametro di modello opzionale senza nome e un valore predefinito valore.
È utilizzato per applicare la condizione enable_if; creerà un errore del compilatore se la condizione non viene soddisfatta.

È possibile utilizzare esattamente la stessa sintassi per i normali argomenti del metodo.

+1

Grazie mille. Non sapevo che ci possano essere parametri modello senza nome. Ora tutto ha un senso. – qft

+1

Per chiarire questa frase: 'creerà un errore del compilatore se la condizione non è soddisfatta': è corretto dire che questo attiva SFINAE (" Errore di sostituzione non è un errore ") e il costruttore non è definito? (Sono un po 'nuovo a SFINAE.) – kevinarpe

Problemi correlati