Cóż, C++ to nie Lisp niestety. Makra Lispa to potęga, wywołanie w kodzie nie różni się od wywołania funkcji, jest tylko jedna różnica - makro jest wywoływane podczas kompilacji i zwraca kod do skompilowania. Co to daje? Cóż, pomijając fakt prostego skrócenia kodu można też dowolne wyrażenia obliczać i generować kod... dlatego właśnie Lispa nazywa się programowalnym językiem programowania. Hm, a jaki jest język makr? To po prostu Lisp, w tym samym języku pisze się kod i makra :>
Dobra, dosyć wzdychania do tego potwora. Cóż, może to nie jest najlepsze rozwiązanie ale... użyłbym assemblera - w końcu asmy posiadają makra pozwalające wykonywać obliczenia podczas kompilacji.
W pliku .h extern, jako oddzielny plik asm właściwe generowanie danych, plik asm jako część projektu i voila - podczas kompilacji generowany jest właściwy ciąg i umieszczany w sekcji danych, przez linker. Jedyny minus jest taki, że mimo wszystko nie można z poziomu C++ przekazywać danych do makra.