2016-01-15 4 views
6

C'è un modo per creare attributi definiti dall'utente in C++ 11 o versioni successive?Attributi definiti dall'utente in C++ 11?

Ad esempio,

[[noreturn]] void exit(); 

è un attributo compilatore definito C++ 11.

mi piacerebbe definire qualcosa di simile:

[[comingsoon]] int function(int); 

Esiste un meccanismo per questo?

Modifica: dovrei menzionare che sto usando Clang.

+0

Controllare [qui] (http://stackoverflow.com/questions/9864328/using-c11-attributes). _Attributes (una nuova funzione C++ 11) sono solo una sintassi standard per le estensioni del compilatore. Poiché sono destinati alle estensioni del compilatore, non esiste un modo standard per creare i propri attributi, come è possibile con le annotazioni Java o gli attributi C#. – Michael

+0

Sembra che [sia possibile in MSVS] (https://msdn.microsoft.com) /en-us/library/yd21828z.aspx) ma è un'estensione del compilatore. – NathanOliver

+2

@NathanOliver Questo è C++/CLI. –

risposta

3

La lingua non consente di aggiungere attributi.

Ovviamente, se si utilizza Clang, è possibile modificare la sorgente di Clang e aggiungere eventuali attributi desiderati.

+1

Sai se ci sono piani per versioni future di C++ per consentire agli utenti di aggiungere attributi? – oconnor0

+1

Non lo so. Direi di no. C++ non ha il tipo di capacità di riflessione che lo renderebbe utile. –

+0

Non sicuro che questa risposta rimanga vera. https://msdn.microsoft.com/en-us/library/60e6k732.aspx –

4

Per ora non è possibile definire gli attributi utente.

Non c'è, per quanto ne so, nessuna informazione su se questa funzione è pianificata o meno. Tuttavia, un'occhiata a questo FAQ risposta da Stroustrup: https://isocpp.org/wiki/faq/cpp11-language-misc#attributes, soprattutto questa parte:

Un uso previsto per gli attributi è stato migliorato il supporto per OpenMP. Per esempio:

for [ [ omp::parallel() ] ] (int i=0; i<v.size(); ++i) { 
    // ... 
} 

potrebbe significare che essi hanno intenzione di permettere programmatore di definire il proprio attributo. Attendere & vedere.