Macro variadic con 3 termini
-
29-09-2019 - |
Domanda
Sto cercando di capire un codice C ++ che legge una dll in modo esplicito.
Fa Uno sa come la linea #define LFE_API(name) LFE_##name name
sotto funziona davvero?
Capisco #define LFE_API(name) LFE_##name
ma confondersi su l'ultima "nome".
struct Interface
{
# ifdef LFE_API
# error You can't define LFE_API before.
# else
# define LFE_API(name) LFE_##name name
LFE_API(Init);
LFE_API(Close);
LFE_API(GetProperty);
# undef LFE_API
# endif
};
Soluzione
Dal momento che la prima parte della macro (LFE _ ## nome) appena concatena le due parti, una chiamata a LFE_API è la creazione di una variabile denominata nome con il tipo LFE ## nome, come ad esempio:
LFE_API (Init) si espande per LFE_Init Init;
Altri suggerimenti
LFE_Init Init;
ecc.
Esegui g ++ -E sul codice per vedere ciò che viene prodotto. Un elemento di struttura ha bisogno di un tipo e un nome.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow