Domanda

#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \
    static CEntityFactory<DLLClassName> mapClassName( #mapClassName );
.

Si tratta di una macro dallo sciame alieno mod per la mezza vita 2, pensata per essere compilata con MSVC.

Non ho mai visto un argomento preceduto da un # in una macro prima, e non sono sicuro se questa è una cosa specifica di MSVC o semplicemente non comune.Cosa significa?

È stato utile?

Soluzione

Questo fa parte dello standard C e C ++ e non è specifico per l'implementazione.L'operatore di pre-elaborazione # che stringe il suo argomento.Ci vogliono che i carini siano stati trasmessi nella macro per il parametro designato dal suo operando (in questo caso, il parametro mapClassName) e rende una stringa letterale da esse.Quindi, per un semplice esempio,

#define STRINGIZE(x) # x

STRINGIZE(Hello World)
// gets replaced with
"Hello World"
.

Si noti che i token degli argomenti sono non la macro sostituita prima che vengano rigorosi, quindi se Hello o World è stato definito come una macro, il risultato sarebbe comunque lo stesso.È necessario Utilizzare un livello aggiuntivo di indirezione per ottenere gli argomenti a macro sostituiti (Quella risposta collegata discute l'operatore di concatenazione, ##, ma si applica allo stesso modo all'operatore di rigetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top