in C++ 11, questo è ora sintassi valida:Modelli C++. Staffe angolari Pitfall - Qual è la correzione C++ 11?
vector<vector<float>> MyMatrix;
mentre in precedenza, doveva essere scritto come questo (notare lo spazio):
vector<vector<float> > MyMatrix;
La mia domanda è quale sia la risolvi che lo standard utilizza per consentire la prima versione?
Potrebbe essere semplicemente come rendere >
un token invece di >>
? Se non è così, cosa non funziona con questo approccio?
Ritengo che forme come myTemplate< x>>3 >
non siano un problema, poiché è possibile disambiguarle eseguendo myTemplate<(x>>3)>
.
'>' è * già * un token ma il parser è ed era avido. La correzione deve quindi apparire diversa. - Una possibilità sarebbe naturalmente quella di rendere '>>' * non * un gettone. –
Suppongo che stiate cercando §14.2.3: * "Quando si analizza un elenco argomento-modello, il primo non annidato viene preso come delimitatore finale piuttosto che come operatore maggiore di. nested >> viene considerato come due token consecutivi ma distinti, il primo dei quali viene considerato come la fine dell'elenco template-argument e completa l'id-modello "* – Zeta
" qual è la correzione che lo standard utilizza per consentire la prima versione "- Credo che questo non abbia nulla a che fare con _Lo standard_. Voglio dire - l'implementazione. Credo che sia una decisione del compilatore come implementare questo requisito, forzato da _Lo standard_. –