Препроцессор
От: LeonCrew Беларусь  
Дата: 04.07.11 17:53
Оценка: 2 (1)
Имеется:
#define Real float

Хочется:
#if Real == float
...
#elif Real == double
...
#elif Real == Fixed16p16
...
#else
#error Not defined "Real"
#endif


Как нечто подобное организовать мультиплатформенно и без буст?
Re: Шаблоны?
От: Wissenschaftler http://rsdn_user.livejournal.com
Дата: 04.07.11 18:37
Оценка: 1 (1)
чисто на препроцессоре такое не реализовать. можно похожие вещи сделать, используя специализацию шаблонов. но нужен конкретный юзкейс.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re: Препроцессор
От: Vain Россия google.ru
Дата: 04.07.11 18:59
Оценка:
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Re: Препроцессор
От: watch-maker  
Дата: 04.07.11 22:54
Оценка: 2 (2)
Здравствуйте, 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
Re[2]: Препроцессор
От: Centaur Россия  
Дата: 05.07.11 07:10
Оценка: +1
Здравствуйте, watch-maker, Вы писали:

WM>#define T(x) q##x
WM>#define H(x) T(x)


Человек, который потом споткнётся об ваши два макроса с однобуквенными названиями, вас проклянёт. И, может быть, даже покалечит.
Re: Препроцессор
От: uzhas Ниоткуда  
Дата: 05.07.11 07:28
Оценка: 2 (2) +1
Здравствуйте, LeonCrew, Вы писали:

LC>Как нечто подобное организовать мультиплатформенно и без буст?

не используйте такие макросы
я уже задолбался их воркараундить
используйте typedef
Re[2]: Препроцессор
От: LeonCrew Беларусь  
Дата: 05.07.11 18:17
Оценка:
Здравствуйте, 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, если получится...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.