LINUX.ORG.RU

[Сxx][Донские^WКроссплатформенные метавычисления][Компайл-тайм]Замена макросов шаблонами


0

1

Кто-нибудь пробовал последовательно последовать совету заменять условную компиляцию/макросы шаблонами/инлайнами/компилероассертами? И если да - насколько последовательно (удалось ли совсем-совсем воздержаться от макросов/костылей препроцессора, окромя #include/прагм/хедердружинников). Есть, конечно, конструкция

 template<bool Condition>
 struct IF { typedef... };

 template<> struct IF<true> { blah-blah-blah };


есть всякоразные
template<...> struct X { enum { Feature = constexpr ? x : y }; };

а есть

__COUNTER__, __FILE__ и __LINE__. Примеры адекватной замены в студию :) Еще вариант: компайл-тайм выбор платформы без использования «#if (UNIX || LINUX)» (то есть, понятно, что можно политики/фабрики, а можно ли совсем без #if[[n]def], спрятанных под политиками/фабриками?)

Фибоначей с факториалами не предлагать (как трюк прикольно, но практически неинтересно: теоретики на кухне любят метавычислениями заниматься - слово за слово, факториалом по столу... Интересует практика внедрения в жизнь «у станка»). Либеральный constexpr из Сxx11 тоже :)))

По-видимому, никто не пользовался :) Теоретикам на кухне и стеклянный^Wфакториал в руки!

slackwarrior ★★★★★
() автор топика

кто и где советовал заменять условную компиляцию шаблонами? вы, месье, ничего не перепутали? ничего не поняли в чьём-то заявлении и решили казаться самым умным?

anonymous
()

Простой #ifdef #else #endif против класса с какими-то SFINAE, статическим if-ом через sizeof и другими костылями? Я выберу #ifdef

stack_protector
()
Ответ на: комментарий от anonymous

Ничего не перепутал. Есть горячие сторонники данного подхода, готовые теоретически использовать :) Пишут шаблонные селекторы... уже почти совсем-совсем готово. Лично знаком по паре кухонных диспутов.

slackwarrior ★★★★★
() автор топика

Всему своё применение.

Я бы не стал заменять условную компиляцию шаблонами там, где это не нужно

yoghurt ★★★★★
()
Ответ на: комментарий от slackwarrior

Как заменить шаблонами условную компиляцию? Приведите пример замены шаблонами условной компиляции винда/юникс, 32/64 бита. Очень интересно ознакомиться.

anonymous
()
Ответ на: комментарий от slackwarrior

хотя я понял, я чё-та вначале подумал что вы вообще про отказ от макропроцессра пишете.

anonymous
()
Ответ на: комментарий от anonymous

Почему вы мне это предлагаете? Мне тоже интересно

slackwarrior ★★★★★
() автор топика

Бред какой-то. Всему свое место. Ес-но шаблонами не заменить __LINE__ или #ifdef __linux__. Равно как и препроцессором полноценного аналога скажем vector<T> или упомянутого SFINAE не сделать.

ratatosk
()

Не надо извращаться. Если макросы понятнее и удобнее, надо использовать макросы.

r2d2
()

Любой инструмент создается с целью облегчить процесс выполнения работы. Препроцессор и шаблоны не исключение. Ну а если кто-то предпочитает использовать инструмент не по назначению, например забивает гвозди микроскопом - это его личные трудности, нет смысла уподобляться.

m0rph ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.