2011-01-14 12 views
25

C'è qualcosa come le annotazioni di Java in C++?annotazioni simili a Java in C++

Ad esempio, l'annotazione @Override contrassegna una funzione che sovrascrive un'altra funzione e, in caso contrario, darebbe un errore in fase di compilazione.

Sto cercando qualcosa di simile in C++.

risposta

8

C++0x avrà questa funzione, in cui è possibile specificare esplicitamente se una funzione membro intende sovrascrivere una funzione della classe base, utilizzare un'implementazione predefinita generata dal compilatore e molto altro.

+2

Ora che C++ 11 è stato rilasciato, esiste qualche documentazione che descrive questa funzione? –

+1

Inoltre, a quale funzione ti riferisci, in particolare? –

+0

Basta cliccare sul link C++ 0x sopra, ti porta esattamente a quella sezione nei documenti di Wikipedia. – Ruben

1

C'è C++ 0x, che ha l''annotazione' di override. O, se si voleva ottenere di più della "interfaccia" Java come codice che gli errori se non si implementano i metodi, si potrebbe utilizzare una classe astratta:

class Base { 
public: 
    virtual void foo() = 0; 
}; 

class Extended : public Base { 
public: 

    void foo2() { 
     cout << "hi" << endl; 
}; 

int main() { 
    Extended e; 
    e.foo(); 
} 

Questo si tradurrà in un errore di compilazione, se si non sovrascrivere foo nella classe base. Il problema, tuttavia, è che la classe base non può avere la propria implementazione.

0

Non c'è niente nella lingua per questo. Il meglio che si possa sperare è un'opzione specifica del compilatore. Vorrei iniziare controllando la documentazione di "pragma" per il compilatore.

16

C++ 11 fornisce supporto per "attributi generalizzati", che può essere visto come superset delle annotazioni Java, in quanto possono essere applicati mot solo a variabili/funzioni, ma anche a istruzioni, ad esempio. Ma C++ 11 definisce solo la sintassi per gli attributi generalizzati, non significa che l'utente possa definirli.

Questo articolo fornisce una buona panoramica delle caratteristiche generalizzate: http://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/

GCC supporta questa funzione a partire dalla versione 4.8, secondo http://gcc.gnu.org/projects/cxx0x.html

Per implementare il supporto per gli attributi definiti dall'utente, i plugin compilatore sono promettenti, in particolare sulla base integrazione linguistica di alto livello, come https://fedorahosted.org/gcc-python-plugin/

+0

questa è la cosa più simile a un'annotazione che ho visto finora! Grazie per questa risposta utile – bquenin