Про C++ · Заметки

Современный C++ всё-таки странная штука.
Как было в девяностые? Когда-то я выучил основу BASIC, прочитав книжку за вечер. Потом Pascal, прочитав книжку день-два. C и самые необходимые основные функции библиотеки - тоже за пару дней (спасибо отличной книжке от K & R). На C++ перешёл, осилив книжку "От C к C++" за пару подходов. Delphi - зная Pascal и C++, просто сразу начал писать и разбираться по ходу дела.
Вчера я с помощью сначала всех интернетов, а потом нескольких вопросов к ChatGPT 4 (она тоже с первого раза правильно не подсказала), два часа сначала ваял такой фрагмент, а потом разбирался, что тут написано и почему именно так. И эта конструкция функционально ничего не делает, она просто замедляет компиляцию приложения и позволяет избежать копипасты и сэкономить букв (возможно, меньше, чем она сама длиной). В общем, я на освоение малополезной фичи потратил столько времени, сколько раньше было нужно на половину языка. И я даже не напишу второй раз то же самое с первой попытки без шпаргалки.

template<typename Func, typename Obj, typename Arg, typename = void>
struct is_callable_with_arg : std::false_type {};
template<typename Func, typename Obj, typename Arg>
struct is_callable_with_arg<Func, Obj, Arg, std::void_t<decltype((std::declval<Obj>().*std::declval<Func>())(std::declval<Arg>()))>> : std::true_type {};
void call_impl(VAR_TYPE arg, std::true_type) { (clz_->*sig_)(arg); }
void call_impl(VAR_TYPE, std::false_type) { (clz_->*sig_)(); }
...
call_impl(var_, std::integral_constant<bool, is_callable_with_arg<MEMBER, CLASS, VAR>::value>{});



Comments:

No Comments for this post yet...

Leave a comment:

Your email address will not be displayed on this site.
Your URL will not be displayed on this site. Comments containing URL's of non-personal pages may be removed.
Confirmation Code:
Human Confirmation Code (Captcha)

HTML tags and "<", ">" symbols are not allowed. Links will not be converted to hyperlinks. Any commercials are removed and reported as abuse.

Archives

                                                                                                                                                                                                                                                                   


© Sergey A. Galin, 1998-2021 sageshome.net/blog/