2016-01-15 15 views
6

Czy istnieje sposób tworzenia atrybutów zdefiniowanych przez użytkownika w C++ 11 lub nowszym?Zdefiniowane przez użytkownika atrybuty w C++ 11?

Przykładowo

[[noreturn]] void exit(); 

oznacza C++ 11 atrybut kompilator zdefiniowane.

chciałbym zdefiniować coś takiego:

[[comingsoon]] int function(int); 

Czy istnieje mechanizm do tego?

Edycja: Powinienem wspomnieć, że używam Clanga.

+0

Sprawdź [tutaj] (http://stackoverflow.com/questions/9864328/using-c11-attributes). _Atrybuty (nowa funkcja C++ 11) to standardowa składnia rozszerzeń kompilatorów. Ponieważ są przeznaczone do rozszerzeń kompilatorów, nie ma standardowego sposobu tworzenia własnych atrybutów, tak jak w przypadku adnotacji Java lub atrybutów języka C# – Michael

+0

Wygląda na to, że [można w MSVS] (https://msdn.microsoft.com /en-us/library/yd21828z.aspx), ale jest to rozszerzenie kompilatora. – NathanOliver

+2

@NathanOliver To jest C++/CLI. –

Odpowiedz

3

Język nie zapewnia możliwości dodawania atrybutów.

Oczywiście, jeśli używasz Clanga, możesz edytować źródło Clang i dodać dowolne atrybuty.

+1

Czy wiesz, czy istnieją plany na przyszłe wersje C++, aby umożliwić użytkownikom dodawanie atrybutów? – oconnor0

+1

Nie wiem. Nie zgaduję. C++ nie ma takich możliwości odbicia, które by go przydały. –

+0

Nie jestem pewien, czy ta odpowiedź jest prawdziwa. https://msdn.microsoft.com/en-us/library/60e6k732.aspx –

4

Na razie nie można zdefiniować atrybutów użytkownika.

Istnieje, o ile wiem, brak informacji o tym, czy ta funkcja jest planowana, czy nie. jednak spojrzeć na ten FAQ odpowiedź od Stroustrup: https://isocpp.org/wiki/faq/cpp11-language-misc#attributes, szczególnie ta część:

Jeden planowane wykorzystanie atrybutów jest ulepszone wsparcie dla OpenMP. Na przykład:

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

Może to oznaczać, że planuje umożliwić programista zdefiniować swój własny atrybut. Zaczekaj & patrz.

Powiązane problemy