Сообщение Re: Что не так с C++ - компил-таймовый C++ от 08.12.2024 18:23
Изменено 08.12.2024 20:49 rg45
Re: Что не так с C++ - компил-таймовый C++
Здравствуйте, Shmj, Вы писали:
S>Пример: https://www.programiz.com/online-compiler/6fkrEBCC3yqjv
S>- ну изврат же?
Конечно, изврат. По своему скудоумию данное решение может соперничать, разве что, с тупой постановкой задачи — продетектить наличие члена с именем find, безотносительно того, функция ли это, данное или тип.
Но даже в такой тупой постановке, даже на C++03, эта задача могла быть решена более компактно и элегантно. На С++11 — ещё более компактно и элегантно. На С++20 это решение в три строчки:
http://coliru.stacked-crooked.com/a/eaa800071fdddec0
И даже эти три строчки, повторюсь, пришлось писать исключительно как дань тупизне постановки задачи. На самом деле, как мне кажется, автора интересовало, всё-таки наличие функции-члена find (шаблонной или нешаблонной). И в этом случае решение могло бы выглядеть как нельзя более естественно и лаконично:
http://coliru.stacked-crooked.com/a/d136bbed619483db
А если вспомнить, что С++ позволяет непосредственно использовать констрейнты, без определения концептов, то, возможно, вообще ничего писать не пришлось бы. Тут уже чисто предпочтения программиста — насколько он хочет, чтоб код выглядел самодокументированным.
А вот так могло бы выглядть это же решение на С++03: http://coliru.stacked-crooked.com/a/dcdb0473b3c69a03. Не настолько элегантно и лаконично, как на С++20, конечно, но по-любому лучше, чем та порнота, которую ты притащил.
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод? Глядя на какой-нибудь код, ты не понимаешь, что данную задачу можно было решать разными способобами, что этих способов может быть множество, что у каждого из этих способов есть свои плюсы и свои минусы. Но при этом ты назойливо поднимаешь и поднимаешь одну и ту же тему, предлагая что-то улучшать.
S>Пример: https://www.programiz.com/online-compiler/6fkrEBCC3yqjv
S>- ну изврат же?
Конечно, изврат. По своему скудоумию данное решение может соперничать, разве что, с тупой постановкой задачи — продетектить наличие члена с именем find, безотносительно того, функция ли это, данное или тип.
Но даже в такой тупой постановке, даже на C++03, эта задача могла быть решена более компактно и элегантно. На С++11 — ещё более компактно и элегантно. На С++20 это решение в три строчки:
http://coliru.stacked-crooked.com/a/eaa800071fdddec0
struct Fallback { int find; };
template <typename T> struct HasFindMemberAux : T, Fallback { };
template <typename T> concept HasFindMember = not requires { &HasFindMemberAux<T>::find; };
И даже эти три строчки, повторюсь, пришлось писать исключительно как дань тупизне постановки задачи. На самом деле, как мне кажется, автора интересовало, всё-таки наличие функции-члена find (шаблонной или нешаблонной). И в этом случае решение могло бы выглядеть как нельзя более естественно и лаконично:
http://coliru.stacked-crooked.com/a/d136bbed619483db
template <typename T>
concept HasFindMethod = requires(T t, T::key_type key) { t.find(key); };
А если вспомнить, что С++ позволяет непосредственно использовать констрейнты, без определения концептов, то, возможно, вообще ничего писать не пришлось бы. Тут уже чисто предпочтения программиста — насколько он хочет, чтоб код выглядел самодокументированным.
А вот так могло бы выглядть это же решение на С++03: http://coliru.stacked-crooked.com/a/dcdb0473b3c69a03. Не настолько элегантно и лаконично, как на С++20, конечно, но по-любому лучше, чем та порнота, которую ты притащил.
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод? Глядя на какой-нибудь код, ты не понимаешь, что данную задачу можно было решать разными способобами, что этих способов может быть множество, что у каждого из этих способов есть свои плюсы и свои минусы. Но при этом ты назойливо поднимаешь и поднимаешь одну и ту же тему, предлагая что-то улучшать.
Re: Что не так с C++ - компил-таймовый C++
Здравствуйте, Shmj, Вы писали:
S>Пример: https://www.programiz.com/online-compiler/6fkrEBCC3yqjv
S>- ну изврат же?
Конечно, изврат. По своему скудоумию данное решение может соперничать, разве что, с тупой постановкой задачи — продетектить наличие члена с именем find, безотносительно того, функция ли это, данное или тип.
Но даже в такой тупой постановке, даже на C++03, эта задача могла быть решена более компактно и элегантно. На С++11 — ещё более компактно и элегантно. На С++20 это решение в три строчки:
http://coliru.stacked-crooked.com/a/eaa800071fdddec0
И даже эти три строчки, повторюсь, пришлось писать исключительно как дань тупизне постановки задачи. На самом деле, как мне кажется, автора интересовало, всё-таки наличие функции-члена find (шаблонной или нешаблонной). И в этом случае решение могло бы выглядеть как нельзя более естественно и лаконично:
http://coliru.stacked-crooked.com/a/d136bbed619483db
А если вспомнить, что С++ позволяет непосредственно использовать констрейнты, без определения концептов, то, возможно, вообще ничего писать не пришлось бы. Тут уже чисто предпочтения программиста — насколько он хочет, чтоб код выглядел самодокументированным.
А вот так могло бы выглядть это же решение на С++03: http://coliru.stacked-crooked.com/a/dcdb0473b3c69a03. Не настолько элегантно и лаконично, как на С++20, конечно, но по-любому лучше, чем та порнота, которую ты притащил.
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод? Глядя на какой-нибудь код, ты не понимаешь, что данную задачу можно решать разными способобами, что этих способов может быть несколько, что у каждого из этих способов есть свои плюсы и свои минусы. Но при этом ты назойливо поднимаешь и поднимаешь одну и ту же тему, предлагая что-то улучшать.
S>Пример: https://www.programiz.com/online-compiler/6fkrEBCC3yqjv
S>- ну изврат же?
Конечно, изврат. По своему скудоумию данное решение может соперничать, разве что, с тупой постановкой задачи — продетектить наличие члена с именем find, безотносительно того, функция ли это, данное или тип.
Но даже в такой тупой постановке, даже на C++03, эта задача могла быть решена более компактно и элегантно. На С++11 — ещё более компактно и элегантно. На С++20 это решение в три строчки:
http://coliru.stacked-crooked.com/a/eaa800071fdddec0
struct Fallback { int find; };
template <typename T> struct HasFindMemberAux : T, Fallback { };
template <typename T> concept HasFindMember = not requires { &HasFindMemberAux<T>::find; };
И даже эти три строчки, повторюсь, пришлось писать исключительно как дань тупизне постановки задачи. На самом деле, как мне кажется, автора интересовало, всё-таки наличие функции-члена find (шаблонной или нешаблонной). И в этом случае решение могло бы выглядеть как нельзя более естественно и лаконично:
http://coliru.stacked-crooked.com/a/d136bbed619483db
template <typename T>
concept HasFindMethod = requires(T t, T::key_type key) { t.find(key); };
А если вспомнить, что С++ позволяет непосредственно использовать констрейнты, без определения концептов, то, возможно, вообще ничего писать не пришлось бы. Тут уже чисто предпочтения программиста — насколько он хочет, чтоб код выглядел самодокументированным.
А вот так могло бы выглядть это же решение на С++03: http://coliru.stacked-crooked.com/a/dcdb0473b3c69a03. Не настолько элегантно и лаконично, как на С++20, конечно, но по-любому лучше, чем та порнота, которую ты притащил.
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод? Глядя на какой-нибудь код, ты не понимаешь, что данную задачу можно решать разными способобами, что этих способов может быть несколько, что у каждого из этих способов есть свои плюсы и свои минусы. Но при этом ты назойливо поднимаешь и поднимаешь одну и ту же тему, предлагая что-то улучшать.