2010-09-19 17 views
9

Possiamo avere una classe locale definita all'interno di una funzione, ma questa classe non può essere un modello che è un po 'noioso e incoerente. C'è qualche aggiornamento su quello in C++ 0x standard?Modello di classe locale

risposta

7

Sì. In realtà questa modifica alle regole è ciò che rende possibili le espressioni Lambda poiché un'espressione Lambda crea un tipo locale senza nome.

Spiacente, ho letto male la tua domanda. Ho pensato che stavi parlando di usare una classe locale come parametro del template. Questo non era permesso in C++ 98 e C++ 03 ma funzionerà in C++ 0x.

Come per la tua domanda attuale, C++ 0x non cambierà nulla di tutto questo.

Sinceramente non vedo alcun motivo per consentire "modelli di classi locali della funzione". Il supporto per "modelli di classi locali di funzioni" è una funzionalità che probabilmente interessa solo a una manciata di persone. E scrivere modelli di classe al di fuori delle funzioni è un sostituto accettabile per questo. Questo ovviamente non mette abbastanza pressione sui produttori di compilatori, non importa quanto sia complicato implementare una funzione del genere. I produttori di compilatori sono probabilmente più preoccupati di implementare altre funzionalità di C++ 0x.

Ma capisco il tuo punto. Può sembrare un'irregolarità non necessaria della lingua. Se si cura fortemente di questa funzionalità, è possibile scrivere una proposta formale e inviarla al comitato di standardizzazione del C++ in circa due anni quando è probabile che accetteranno proposte per "C++ 1y".

+13

Al contrario, non vedo un motivo per non consentire una classe modello locale. Non ho idea del perché sia ​​disabilitato nello standard C++ – valdo

+0

@valdo: hai mai scritto un compilatore? o sfogliare il codice di un compilatore? Dal punto di vista dell'usabilità, potrebbe essere bello, ma dal punto di vista di chi scrive il compilatore aggiunge una quantità di complessità empia per una funzionalità di nicchia: non ne vale la pena. –

+0

@ Matthieu M: Probabilmente non sarebbe difficile se lo progettaste da zero, ma questo è fondamentalmente un problema precedente. L'ambito delle funzioni deriva da C e il codice è probabilmente indipendente da quello degli spazi dei nomi. Ma se aveste implementato le funzioni come una sorta di spazio dei nomi, tali funzionalità sarebbero venute gratuitamente. – MSalters

Problemi correlati