Size: a a a

2020 August 16

A

Alex in pro.cxx
а для меня - наоборот
источник

A

Alex in pro.cxx
если заведомо известно, что следующий блок кода не будет компилироваться, то и нефиг ломиться смотреть, есть ли там в структурах указанные поля. Дурная работа.
источник

m

magras in pro.cxx
Alex
если заведомо известно, что следующий блок кода не будет компилироваться, то и нефиг ломиться смотреть, есть ли там в структурах указанные поля. Дурная работа.
Меня волнует не компилятор, а человек. Зачем мне читать код, который точно никогда не должен быть скомпилирован?
источник

A

Alex in pro.cxx
Я написал одну лямбду на все случаи, проверил, отладил. Она вызывается из трёх разных мест. Она легко понятна. А вы говорите, что я должен сделать три почти идентичных копии, но с изменениями, а любое изменение - возможность для ошибки.
источник

A

Alex in pro.cxx
не говоря уж о бестолковом раздувании кода
источник

A

Alex in pro.cxx
так что меня тоже беспокоит исключительно человек и моё лично удобство программирования
источник

m

magras in pro.cxx
Alex
Я написал одну лямбду на все случаи, проверил, отладил. Она вызывается из трёх разных мест. Она легко понятна. А вы говорите, что я должен сделать три почти идентичных копии, но с изменениями, а любое изменение - возможность для ошибки.
Если она вызывается из разных мест с разными типами, значит в ней есть явные или неявные шаблонные параметры и код будет собраться.
источник

A

Alex in pro.cxx
Да, немножко слукавил, она тоже размножена три раза, один из двух объектов захватывается из локальной скоупа
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Меня волнует не компилятор, а человек. Зачем мне читать код, который точно никогда не должен быть скомпилирован?
Он может компилироваться, но например на другой платформе
источник

ПК

Побитый Кирпич... in pro.cxx
Заифать это через с++-ный if constexpr и систему типов гораздо приятнее чем через макросы
источник

A

Alex in pro.cxx
ну да, сам-то код в каком-то сценарии нужен, раз он написан
источник

A

Alex in pro.cxx
В моём случае это через макросы и не сделать
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
В моём случае это через макросы и не сделать
Вообщем мне кажется надо копать в сторону максимального упрощения создания dependent контекста. Чтоб не писать каждый раз его заново например, а юзать какую нибудь utils
источник

O

Ofee in pro.cxx
Alex
Я написал одну лямбду на все случаи, проверил, отладил. Она вызывается из трёх разных мест. Она легко понятна. А вы говорите, что я должен сделать три почти идентичных копии, но с изменениями, а любое изменение - возможность для ошибки.
Моё имхо: проблема как раз в том, что пишется одна универсальная функция "сделать хорошо". Что же она делает в месте каждого конкретного вызова — оставим загадкой для читающего

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

ПК

Побитый Кирпич... in pro.cxx
Ofee
Моё имхо: проблема как раз в том, что пишется одна универсальная функция "сделать хорошо". Что же она делает в месте каждого конкретного вызова — оставим загадкой для читающего

Практически наверняка, не нужно делать три копии этой функции. Нужно разделить её на меньшие части и, если уж так хочется одну универсальную функцию, собрать несколько её версий из функций по-меньше. Тогда и при чтении будет чуть понятнее
Почему загадкой? Условия все в ифах есть
источник

O

Ofee in pro.cxx
Побитый Кирпич
Почему загадкой? Условия все в ифах есть
А ещё там же есть какой-то контекст и вычисления, которые придётся прочитать. Это хорошо работает, пока функция маленькая. Мне кажется, что она, всё же, большая
источник

ПК

Побитый Кирпич... in pro.cxx
Ofee
А ещё там же есть какой-то контекст и вычисления, которые придётся прочитать. Это хорошо работает, пока функция маленькая. Мне кажется, что она, всё же, большая
Это вообще мне кажется не связано с проблемой что такой юзкейс "условной компиляции" не решается силами с++. Я могу привести пример маленькой функции с точно такой же проблемой
источник

V

Vilen in pro.cxx
Здравствуйте.
источник

m

magras in pro.cxx
Побитый Кирпич
Заифать это через с++-ный if constexpr и систему типов гораздо приятнее чем через макросы
Мне все еще хотелось бы увидеть пример практической проблемы, которую решил бы if constexpr вне шаблонов.

Видя команды препроцессора мне становится очевидно, что это или platform specific код, или какие-то флаги сборки. Видя if constexpr я понимаю что это compile time. Зачем их смешивать с учетом того, что if constexpr не сможет заменить препроцессор?

Ну и я не вижу особых преимуществ кода
if constexpr (is_gcc)
 __intrinsic();
else
 general_case();


над
#if IS_GCC
 __intrinsic();
#else
 general_case();
#endif
источник

O

Ofee in pro.cxx
Побитый Кирпич
Это вообще мне кажется не связано с проблемой что такой юзкейс "условной компиляции" не решается силами с++. Я могу привести пример маленькой функции с точно такой же проблемой
Опять же, целью if constexpr вряд ли была условная компиляция, скорее — уменьшение объемов SFINAE
источник