Meta-programmazione

10

Ho appena iniziato il mio viaggio come sviluppatore C ++ e recentemente ho svolto ricerche su un argomento chiamato meta-programmazione. Finora ho ricevuto molte informazioni sull'argomento e ho alcune domande.

  1. Uso di Reflection in c ++: è possibile? Secondo la mia comprensione, la riflessione è una tecnica di meta-programmazione che ha la capacità di manipolare uno stato di un programma e la sua manipolazione può essere l'introspezione o l'intrusione.

  2. Qual è la differenza tra architettura riflettente e architettura a meta-livello? In quale categoria si trova l'architettura meta-programmazione?

  3. La meta-programmazione si presenta in due livelli: meta livello e livello base. A mio avviso, il programma oggetto o il sistema in esame è il livello base, e il meta programma che sta per operare sul sistema in esame è il meta livello. Sono corretto?

Aiutami anche fornendo alcune linee guida su come lavorare sulla metaprogrammazione dei modelli in C ++.
Mi puoi suggerire alcuni esempi realizzabili che posso cercare di mettere in pratica in questa tecnica di programmazione?

    
posta ChrisF 19.06.2011 - 13:32
fonte

2 risposte

10

Metaprogramming significa semplicemente che hai i mezzi per scrivere codice che scrive altro codice (in senso lato). C ++ fa questo attraverso il meccanismo del modello, che è fondamentalmente un linguaggio macro sicuro dal tipo. È perfettamente possibile applicare semplicemente il passo di espansione del modello e il risultato sarà codice C ++ valido per template.

Reflection è la capacità di un linguaggio di programmazione e / o dell'ambiente di runtime di ispezionare (e spesso modificare) i propri elementi linguistici in fase di esecuzione. In genere, i linguaggi riflettenti offrono strutture dati che rappresentano elementi del linguaggio come classi, metodi, variabili, parametri, ecc., Nonché routine o classi per ispezionarli, modificarli e crearli. L'abilità di modifica rende la riflessione un tipo di meta-programmazione, poiché ti consente di scrivere codice che genera altro codice.

Altri esempi di metaprogrammazione includono generatori di codice, binari auto modificanti (sebbene questi non siano più popolari oggi come lo erano due decenni fa), macro C; si potrebbe sostenere che il curriculum e tecniche di programmazione funzionale simili sono anche una sorta di metaprogrammazione.

    
risposta data 19.06.2011 - 15:38
fonte
1
  1. Nessun. Non lo è. I programmi C ++ sono compilati in codice macchina e tutte le informazioni sulle classi ecc. Vengono perse (a meno che non si usi C ++ / CLI per l'ambiente .NET, ma non è puro C ++).

2-3. Non so - aspetta un'altra risposta che ti aiuti in questo modo: -)

La meta-programmazione basata su modelli C ++ è molto potente, ma anche complessa. L'espansione del modello richiede uno stile funzionale di programmazione piuttosto che una programmazione imperativa utilizzata da C ++. Se non hai esperienza precedente con la programmazione funzionale ti consiglierei di fare una deviazione e imparare un po 'di basic lisp, haskell o schema.

    
risposta data 19.06.2011 - 13:43
fonte

Leggi altre domande sui tag