MY_LOG_MESSAGE
verranno trattati come un argomento dal preprocessore, perché è una direttiva del preprocessore. LEVEL1,"This is my log"
è contenuto all'interno di MY_LOG_MESSAGE
e viene trattato come un singolo argomento del preprocessore quando utilizzato in altre direttive del preprocessore.
per chiamare le funzioni semplici come
void DoLogging(Level level, const std::string& msg)
la macro saranno trattati come ci si aspetta. Quindi, DoLogging(MY_LOG_MESSAGE)
funzionerà. Si espanderà qui, perché è not
utilizzato come argomento di un'altra direttiva preprocessore, ma all'interno di una funzione real
. Che cosa potrebbe aiutare è qualcosa di simile:
#define MY_LOG_MESSAGE LOG(LEVEL1, "My message")
Furhtermore, se ci sono LOG multipla() - macro, come lei ha sottolineato, basta usare come parametro di voi MY_LOG_MESSAGE, in questo modo:
#define MY_LOG_MESSAGE(logger) logger(LEVEL1, "My message")
Nel tuo codice chiamalo semplicemente MY_LOG_MESSAGE(LOG)
Cosa significa 'LOG' espandersi? – trojanfoe
@trojanfoe Fallisce il preprocesso – dimba
Se si tratta in realtà della registrazione e non solo di un esempio, suggerirei seriamente di utilizzare una libreria di registrazione appropriata, ad es. [Boost.Log] (http://www.boost.org/doc/libs/1_54_0/libs/log/doc/html/index.html), invece di far girare il tuo. Soprattutto se è basato sul preprocessore. –