c++ - ifdef - ¿Qué hace##(double hash) en una directiva de preprocesador?
endif c++ (1)
##
es el operador del preprocesador para la concatenación.
Entonces si usas
DEFINE_STAT(foo)
en cualquier parte del código, se reemplaza con
struct FThreadSafeStaticStat<FStat_foo> StatPtr_foo;
antes de que tu código sea compilado
Aquí hay otro ejemplo de una publicación de blog mía para explicar esto más.
#include <stdio.h>
#define decode(s,t,u,m,p,e,d) m ## s ## u ## t
#define begin decode(a,n,i,m,a,t,e)
int begin()
{
printf("Stumped?/n");
}
Este programa se compilaría y ejecutaría con éxito, y produciría el siguiente resultado:
Stumped?
Cuando el preprocesador funciona en este código,
-
begin()
se reemplaza pordecode(a,n,i,m,a,t,e)()
-
decode(a,n,i,m,a,t,e)()
se reemplaza porm ## a ## i ## n()
-
m ## a ## i ## n()
se reemplaza pormain()
Así efectivamente, begin()
se reemplaza por main()
.
#define DEFINE_STAT(Stat) /
struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;
La línea anterior es tomada de Unreal 4, y sé que podría preguntar sobre los foros irreales, pero creo que esta es una pregunta general de C ++ que merece ser preguntado aquí.
Entiendo que la primera línea define una macro, sin embargo, no estoy muy versado en los chanchullos del preprocesador en C ++, así que estoy perdido allí. La lógica me dice que la barra invertida significa que la declaración continúa en la siguiente línea.
FThreadSafeStaticStat se parece un poco a una plantilla, pero hay # y una sintaxis que nunca antes había visto en C ++
¿Podría alguien decirme qué significa esto? Entiendo que es posible que no tenga acceso a Unreal 4, pero es solo la sintaxis que no entiendo.