Информация об изменениях

Сообщение Re[8]: Философско-практические вопросы про метапрограммирова от 11.02.2023 11:23

Изменено 11.02.2023 11:26 rg45

Re[8]: Философско-практические вопросы про метапрограммирова
Здравствуйте, ботаныч, Вы писали:

Б>Здравствуйте, Максим, Вы писали:


М>>А можете, если есть время, более подробно написать

Б> почитав код ниже, мне хочется вопрос задать. Вам это в каком контексте надо? Если для продакшин кода, то специфика одна, если для библиотечного кода, да еще и header only подход будет сршенно разным, для нового продакшин кода, подход rg45 достаточно лаконичен, где стандарт и набор компиляторов практически предопределен и меняется довольно редко (хотя и там будут вопросы по скорости компиляции, иногда короткие лаконичные вещи компилируются дольше). Если же это библиотечный код, то часто предпочтение отдается дедовским версиям SFINAE громоздким, но покрывающим большее количество компиляторов. Также Вам может понадобиться столкнуться с периодом — до variadic templates.

Б>
Б>namespace hl = std;
Б>template <template <typename... > class Tmp> struct holder {};

Б>template <typename T> struct extract : hl::false_type {};

Б>template <typename... Ts, template <typename... > class Tmpl>
Б>struct extract<Tmpl<Ts...>> : hl::true_type
Б>{
Б>    typedef holder<Tmpl> type;
Б>};
 
Б>int main()
Б>{
Б>  enum {v = std::is_same<typename extract<T>::type, holder<std::set>>::value};
Б>}
Б>


Ну и кроме того, давай, ты доведешь своей пример до компилируемого состояния, покажешь пример использования в контесте задачи, а потом я расскажу, почему это плохо. Договорились?
Re[8]: Философско-практические вопросы про метапрограммирова
Здравствуйте, ботаныч, Вы писали:

Б>Здравствуйте, Максим, Вы писали:


М>>А можете, если есть время, более подробно написать

Б> почитав код ниже, мне хочется вопрос задать. Вам это в каком контексте надо? Если для продакшин кода, то специфика одна, если для библиотечного кода, да еще и header only подход будет сршенно разным, для нового продакшин кода, подход rg45 достаточно лаконичен, где стандарт и набор компиляторов практически предопределен и меняется довольно редко (хотя и там будут вопросы по скорости компиляции, иногда короткие лаконичные вещи компилируются дольше). Если же это библиотечный код, то часто предпочтение отдается дедовским версиям SFINAE громоздким, но покрывающим большее количество компиляторов. Также Вам может понадобиться столкнуться с периодом — до variadic templates.

Б>
Б>namespace hl = std;
Б>template <template <typename... > class Tmp> struct holder {};

Б>template <typename T> struct extract : hl::false_type {};

Б>template <typename... Ts, template <typename... > class Tmpl>
Б>struct extract<Tmpl<Ts...>> : hl::true_type
Б>{
Б>    typedef holder<Tmpl> type;
Б>};
 
Б>int main()
Б>{
Б>  enum {v = std::is_same<typename extract<T>::type, holder<std::set>>::value};
Б>}
Б>


Ну и кроме того, давай, ты доведешь своей пример до компилируемого состояния, покажешь пример использования в контесте задачи, а потом я расскажу, почему это плохо. Договорились?

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