Сообщение Re: Что не так с C++ - компил-таймовый C++ от 08.12.2024 18:23
Изменено 08.12.2024 19:06 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
И даже эти три строчки, повторюсь, пришлось писать исключительно как дань тупизне постановки задачи.
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод?
S>Пример: https://www.programiz.com/online-compiler/6fkrEBCC3yqjv
S>- ну изврат же?
Конечно, изврат. По своему скудоумию данное решение может соперничать, разве что, с постановкой задачи. Продетектить наличие члена с именем find, безотносительно того функция это, данное или тип.
Но даже в такой тупой постановке, даже на C++03, эта задача могла быть решена более компактно и элегантно. На С++11 — ещё более компактно и элегантно. На С++20 это решение в три строчки:
http://coliru.stacked-crooked.com/a/eaa800071fdddec0
#include <iostream>
#include <vector>
#include <set>
struct Fallback { int find; };
template <typename T> struct HasFindMemberAux : T, Fallback { };
template <typename T> concept HasFindMember = not requires { &HasFindMemberAux<T>::find; };
int main()
{
std::cout << HasFindMember<std::vector<int> > << ' '
<< HasFindMember<std::set<int> > << std::endl;
}
И даже эти три строчки, повторюсь, пришлось писать исключительно как дань тупизне постановки задачи.
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод?
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
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод?
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); };
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод?