|
Boost : |
From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2006-04-08 15:50:10
Roland Schwarz wrote:
> I am wondering if it would be possible to write a computed include macro
> that is sufficiently compiler independent?
>
> E.e. given a macro
>
> #define BOOST_PLATFORM_INCLUDE(hdr) ... definition missing ...
>
> which should be usable as:
>
> #include BOOST_PLATFORM(foo.h)
>
> The effect being win32/foo.h included on one linux/foo.h included on
> another platform.
>
> I have yet figured out a way that can achieve something close, but gcc
> does not allow to use a parameterized macro.
Where is the problem?
#if defined(linux) || defined(__linux) || defined(__linux__)
# define PLATFORM_HEADER_DIRECTORY linux
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
# define PLATFORM_HEADER_DIRECTORY windows
// [...]
#endif
#define PLATFORM_HEADER(header) <PLATFORM_HEADER_DIRECTORY/header>
#include PLATFORM_HEADER(foo.h)
Should work. I've no idea how portable it is, though.
If you need quotes instead use BOOST_PP_STRINGIZE:
#define PLATFORM_HEADER(header) \
BOOST_PP_STRINGIZE(PLATFORM_HEADER_DIRECTORY/header)
Regards,
Tobias
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk