2014-04-02 12 views
5

In 11 di serie C++ (clausola 3.3.9/3) ho trovato questo frammento di codice:chiamato entità come puntatore al T in lista parametri template

template<class T, T* p, class U = T> class X { /∗ ... ∗/ }; 

Qualcuno può spiegare per me che possibile (e utile) il codice può contenere nel corpo della classe X? Con l'utilizzo del parametro p ofcourse.

+4

IMHO lo snippet è solo lì per dimostrare che i parametri del modello possono dipendere da un parametro template precedente. –

+0

@ πάντα ῥεῖ, lo so. Ma quando ho visto il puntatore come parametro template con nome ho pensato: "In quali casi questo può essere utile"? e non è stato possibile trovare la risposta tranne in questo modo: 'constexpr T * ptr = nullptr;' e quindi usare 'ptr' come parametro. – alexolut

+0

Sì, o qualsiasi altro indirizzo costante ragionevole e valido (prendere in considerazione la possibilità di accedere al bare metal, ad esempio interfacce bus estese, ecc.). –

risposta

2

Se foo è un oggetto globale di tipo T, è possibile passare un puntatore-to-foo al template class X.

Ad esempio, supponiamo che T sia un ostream. Posso creare due tipi di registrazione, che si basano sul tipo di output in errore o fuori. I loro metodi static possono persino farlo.

Problemi correlati