Come negli stati delle domande, so che ci saranno degli attributi per gli spazi dei nomi e gli enumeratori in C++ 17. In che modo questo influenzerà il nostro codice? Quali sono questi attributi e cosa ci permetteranno di fare? Non sono riuscito a trovare alcuna buona risorsa per comprendere questa nuova funzionalità.Perché C++ 17 aggiunge attributi a domini ed enumeratori?
8
A
risposta
10
Attualmente, se si stesse per svalutare un particolare valore enum, è necessario fare affidamento sulle estensioni del compilatore. Per esempio, in clang, è necessario specificare enum deprecato Valori seguente modo:
enum OperationMode {
OM_Invalid,
OM_Normal,
OM_Terrified __attribute__((deprecated)),
OM_AbortOnError __attribute__((deprecated)) = 4
};
Una volta che gli attributi enumerazioni e spazi dei nomi di supporto, ci sarà un modo cross-compilatore standard di implementare una funzionalità simile:
enum OperationMode {
OM_Invalid,
OM_Normal,
OM_Terrified [[deprecated("re-named to invalid")]],
OM_AbortOnError [[deprecated("exceptions are used instead")]] = 4
};
Altri attributi uno giorno potrebbero trovare rilevanza per gli spazi dei nomi e dei valori enumerati, ma come lo scrittore proposta afferma:
Questo documento propone di risolvere questi problemi, consentendo attributi a essere specificato su enumeratori e spazi dei nomi ed estende l'attributo [[deprecato]] da applicare a queste entità, come era originariamente previsto per .
Bene, ora è possibile deprecare uno spazio dei nomi o enum con attributi. Questi attributi sono gli stessi che esistono ora. – chris
E questo è tutto? Sarà disponibile solo la deprecazione di namespace/enum? – DawidPi
Se vuoi standardizzare nuovi attributi, vai a proporli. I compilatori come GCC e Clang supportano più dei pochi standard. Ad ogni modo, puoi leggere la [proposta] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4196.html) per motivi di motivazione. Devo anche modificare il mio commento precedente; Ho detto enumerazioni, ma avrei dovuto dire degli enumeratori. – chris