I'm sitting on some legacy code that generates a lot of code through #defines. Now I know it's not possible to have an #ifdef
inside a #define
, but is an #if
possible? I would like to do add some specialization for a specific type. (without making major changes like using templates instead). The following sample gives me cryptic errors so this is not the way:
#define MK_GET(type) \
type get_ ## type (int index) \
{ \
#if type == double \ <-- what i want to add
specialized code... \
#endif
...
} \
MK_GET(double);
MK_GET(int);
MK_GET(string);
You could achieve that with templates:
template<typename T>
struct getter
{
T operator()(int index)
{
// general code
}
};
template<>
struct getter<double>
{
T operator()(int index)
{
// specialized code
}
};
#define CAT(a, b) a ## b
#define MK_GET(type) type CAT(get_, type) (int index) getter<type>()(index)
The pre-processor is one pass process, so you can't place macro defines inside of macro defines. The only way to do this is via the template interface.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With