Имеется:
#define Real float
Хочется:
#if Real == float
...
#elif Real == double
...
#elif Real == Fixed16p16
...
#else
#error Not defined "Real"
#endif
Как нечто подобное организовать мультиплатформенно и без буст?
чисто на препроцессоре такое не реализовать. можно похожие вещи сделать, используя специализацию шаблонов. но нужен конкретный юзкейс.
Здравствуйте, LeonCrew, Вы писали:
LC>Имеется:
LC>LC>#define Real float
LC>
LC>Хочется:
LC>LC>#if Real == float
LC>...
LC>#elif Real == double
LC>...
LC>#elif Real == Fixed16p16
LC>...
LC>#else
LC>#error Not defined "Real"
LC>#endif
LC>
LC>Как нечто подобное организовать мультиплатформенно и без буст?
Ну можно извращения попробовать:
#define Real double
#define float 1
#define double 2
#define Fixed16p16 3
#if Real == float
#undef float
#pragma message("1")
#elif Real == double
#undef double
#pragma message("2")
#elif Real == Fixed16p16
#undef Fixed16p16
#pragma message("3")
#else
#error Not defined "Real"
#endif
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, LeonCrew, Вы писали:
#define Real float
#define T(x) q##x
#define H(x) T(x)
#define qfloat 1
#define qdouble 2
#define qFixed16p16 4
#if H(Real) == H(double)
// double
#endif
#if H(Real) == H(float)
// float
#endif
Здравствуйте, watch-maker, Вы писали:
WM>#define T(x) q##x
WM>#define H(x) T(x)
Человек, который потом споткнётся об ваши два макроса с однобуквенными названиями, вас проклянёт. И, может быть, даже покалечит.
Здравствуйте, watch-maker, Вы писали:
WM>WM>#define Real float
WM>#define T(x) q##x
WM>#define H(x) T(x)
WM>#define qfloat 1
WM>#define qdouble 2
WM>#define qFixed16p16 4
WM>
WM>WM>#if H(Real) == H(double)
WM>// double
WM>#endif
WM>#if H(Real) == H(float)
WM>// float
WM>#endif
WM>
Решение, но не очень красивое, попытаюсь перейти на typedef, если получится...