La metaprogramación de la forma más sencilla se puede definir cómo: «programar un programa que genere o modifique otros programas o a si mismos» el ejemplo más común de la metaprogramación es un compilador que te permite convertir un programa escrito en un lenguaje de alto nivel en uno con lenguaje de bajo nivel, lenguaje máquina o ensamblador.

Pero la metaprogramación tiene otras aplicaciones más potentes, aunque algunos creen que sólo es útil para los programadores flojos que no quieren escribir programas, es cierto te puede ahorrar mucho tiempo, un ejemplo sencillo de metaprogramación que encontré en la wikipedia es el siguiente:

#!/bin/bash
# metaprogram
echo \'#!/bin/bash\' >program
for ((I=1; I<=992; I++)); do
    echo "echo $I" >>program
done
chmod +x program

Este script genera un nuevo programa que imprime por pantalla los números 1 a 992. Esto es sólo una muestra de cómo usar código para escribir más código, no la forma más eficiente de imprimir una lista de números. En cualquier caso, un buen programador puede escribir y ejecutar este metaprogama en apenas un par de minutos, y habrá generado exactamente 1000 líneas de código en esa cantidad de tiempo.

Otro ejemplo interesante es LibSH es un ejemplo de metaprogramación. Escribes shaders en C++, y un motor basado en plantillas y sobrecarga de operadores traduce (en tiempo de ejecución) ese código a un shader para la tarjeta de vídeo.