definición de macro que contiene la directiva #include

definición de macro que contiene la directiva #include


¿Hay alguna forma de definir una macro que contenga un #include?
directiva en su cuerpo?


Si solo pongo
el "#include ", da el error


C2162: "expected macro formal parameter"

ya que aquí no estoy usando # para concatenar cadenas.

Si uso "\# include ", recibo los siguientes dos errores:


error C2017: illegal escape sequence
error C2121: '#' : invalid character : possibly the result of a macro expansion

¿Alguna ayuda?


Algunas respuestas de código


C2162: "expected macro formal parameter" 
error C2017: illegal escape sequence error C2121: '#' : invalid character : possibly the result of a macro expansion 
/* tools.hpp */  #ifndef __TOOLS_HPP__ #def __TOOLS_HPP__  // Macro for adding quotes #define STRINGIFY(X) STRINGIFY2(X)
#define STRINGIFY2(X) #X // Macros for concatenating tokens #define CAT(X,Y) CAT2(X,Y) #define CAT2(X,Y) X##Y #define CAT_2 CAT #define CAT_3(X,Y,Z) CAT(X,CAT(Y,Z)) #define CAT_4(A,X,Y,Z) CAT(A,CAT_3(X,Y,Z)) // etc... #endif
/* pseudomacro.hpp */  #include "tools.hpp" // NO INCLUDE GUARD ON PURPOSE // Note especially FOO, which we can #define before #include-ing this file, // in order to alter which files it will in turn #include. // FOO fulfils the role of "parameter" in this pseudo-macro.  #define INCLUDE_FILE(HEAD,TAIL) STRINGIFY( CAT_3(HEAD,FOO,TAIL) )  #include INCLUDE_FILE(head1,tail1.hpp) // expands to #head1FOOtail1.hpp #include INCLUDE_FILE(head2,tail2.hpp) #include INCLUDE_FILE(head3,tail3.hpp) #include INCLUDE_FILE(head4,tail4.hpp) // etc..  #undef INCLUDE_FILE 
/* mainfile.cpp */  // Here we automate the including of groups of similarly named files  #define FOO _groupA_ #include "pseudomacro.hpp" // "expands" to:  // #include "head1_groupA_tail1.hpp" // #include "head2_groupA_tail2.hpp" // #include "head3_groupA_tail3.hpp" // #include "head4_groupA_tail4.hpp" #undef FOO  #define FOO _groupB_ #include "pseudomacro.hpp" // "expands" to:  // #include "head1_groupB_tail1.hpp" // #include "head2_groupB_tail2.hpp" // #include "head3_groupB_tail3.hpp" // #include "head4_groupB_tail4.hpp" #undef FOO  #define FOO _groupC_ #include "pseudomacro.hpp" #undef FOO  // etc. 
#include FT_FREETYPE_H 
extern "C" { #include "blah.h" } 
#include <mpi.h>
#ifdef __cplusplus #undef __cplusplus #include <mpi.h>
#define __cplusplus #else #include <mpi.h>
#endif
void foo(AbstractClass object) {
switch (object.data_type())
{
case AbstractClass::TYPE_UCHAR :
{
typedef unsigned char PixelType;
#include "snippets/foo.cpp"
}
break;
case AbstractClass::TYPE_UINT:
{
typedef unsigned int PixelType;
#include "snippets/foo.cpp"
}
break;
default:
break;
} }
void bar(AbstractClass object) 
#include "snippets/bar.cpp" 
#include "standardAppDefs.h" #myStandardIncludeMacro 
#define myStandardIncludeMacro #include <foo.h>
#include "standardAppDefs.h" 
#include <foo.h>

No