- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
SFINAE — это просто
template<typename T> struct has_foo{
private: // Спрячем от пользователя детали реализации.
static int detect(...); // Статическую функцию и вызывать проще.
template<typename U> static decltype(std::declval<U>().foo(42)) detect(const U&);
public:
static constexpr bool value = std::is_same<void, decltype(detect(std::declval<T>()))>::value; // Вот видите, готово.
};
Программирование на "Modern C++" всё больше и больше становится похожим на отчаянную попытку выебать козла плазменным телевизором.
via h/205772
Ёбаная крестушня
https://ideone.com/nggFFg
Но у меня вот даже захачить получилось https://ideone.com/UH8XjX - правда это уже говно какое-то.
PS,
по-твоему "нормальные программисты" просто пишут бойлерплейт или тьму макросов?
> Хотя тогда лучше возвращаемый тип проверять через is_convertible
в концептах как раз проверка не на конкретный тип, а на is contextually convertible.
И вот им нужна проверка на наличие метода
Что-то я сомневаюсь, что в спаннере или фотошопе есть хоть одна проверка на наличие метода на этапе конпеляции хоть в одной из зависимостей. Как же бедняши написали sqlite на своей сишке, если в ней нельзя метод на этапе конпеляции проверить и вообще методов нет? Как же реализовать интрузивный список или дерево без проверок методов на этапе конпеляции? Как же мы жили, пока деклтайп не завезли, страшно подумать.
Что касается проверки метода на этапе конпеляции, то это почти наверняка в любой ситуации неуместное говно - я бы очень не хотел, чтобы мой метод просто молча не вызывался из-за опечатки в названии или сигнатуре.
Если еще не очевидно, я пишу с субару и фраушвайнхунд.
1) метушня это просто текущая мода.
2) это старая(*) неизлечимая болезнь, от которой разработка никогда никуда не денется.
(*) вспомни когда было сказано "premature optimization is root of all evil".
с другой стороны, оверинженеринг с опытом проходит. запомни: программа есть отражение того что происходит в голове разраба. (плюс вершн контрол: "и как происходит".) оверинженеринг это просто отражение недопонимания выполняемой задачи. (с другой стороны, иногда нихера не известно в начале проекта, и приходится оверинженерить что бы на дедлайне не парится.)
писали больше кода. Я ж не говорю, что нельзя.
> Как же реализовать интрузивный список или дерево без проверок методов на этапе конпеляции?
в stl контейнерах есть проверки на is_noexcept_movable - проверки на наличие метода, по факту.
> Как же мы жили, пока деклтайп не завезли, страшно подумать.
в си же зачем-то завезли typeof. Видимо, без него сложно было
Это не в Си завезли, а сделали нестандартное расширение, которое поддерживает GCC, Clang и ICC под линупсами (емнип, ICC в линупсах мимикрирует под GCC, а в виндовсах под MSVC)
И применяется сия хуита в основном во всяких говномакросах, типа
Кстати обратите внимание, в этом говномакросе используется аж целых два нестандартных расширения:
https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
Да это же замыкания!
\0
https://wandbox.org/permlink/xN8VPaYXXhsf2emD
Зато потребление достигло невиданных высот, держать в доме телевизор старше одного месяца считалось неприличным, новые модели активно привозились, а старые сдавались в утиль. Искусственный интеллект так и не осилил транспортных средств – то самолёт вмажется в небоскрёб, то автобус въедет в остановку, так что многие программисты переквалифицировались в шофёров. Именно в этой сфере деятельности и подвизался СТРАУСТРУП в последние несколько лет.
Бизнес-центр ничем не отличался от своих собратьев: после стандартных антитеррористических процедур, включавших себя рентген, флюорографию, томографию, спектрографию и прочие «графии», так знакомые любому жителю этой поры, СТРАУСТРУП с трудом отбился от вагиноскопии и попал в комнату №101, ибо рисунок его радужной оболочки по ошибке совпал с данными одного известного биткойнодилера. К счастью, у СТРАУСТРУПА был с собой пистолет, голографическое фото на котором послужило надёжным удостоверением личности в просвещённый электронный век.
– Итак, нам требуется драйвер. Нужно развозить новые модели бытовой техники и забирать старую. Владеете ли вы автоматической гирей? – так на модном полуанглийском именовалась коробка передач.
– Есть небольшой опыт, – отвечал СТРАУСТРУП. – Я всю жизнь имел дело с ручной, так что проблем не будет.
– Сомневаюсь. Я пробовал стик после автомата, и у меня... В самом деле, без высокоуровневых фреймворков сейчас никуда, с ними быстрее и удобнее Ладно, вот вам тестовое задание: развернуть строку… ой, я сам из бывших… нужно подъехать к дому и развернуть автомобиль так, чтобы он был припаркован задом наперёд.
– А зачем это?
– Проверить ваши навыки вождения. Сначала расскажите, какой подход примените.
– Ну, объеду квартал…
– Зачем это, достаточно же просто развернуться.
– Видите ли, я в последние годы был связан с высоконагруженностью – водил грузовик с прицепом…
– Считайте, что ширина дороги достаточная. Считайте, что у вас легковой автомобиль. Кстати, вы водили их последние версии?
– Нет, но…
– Сомневаюсь, что вы справитесь с замыканиями.
– Какими ещё замыканиями?
– Гудки режут слух, так что в современных моделях звуковой сигнал мычит. Так как же вы развернётесь?
– Ну, я подъеду, включу Reverse…
– Библиотечные функции использовать нельзя!
– А как же многопоточность? Водители из других полос вряд ли будут рады простаивать, пока я описываю большой круг.
– Это не главное. Нам важно, чтобы быстро. К сожалению, мы не можем вам предложить работу. Наши специалисты разворачиваются за пару секунд.
– Да не может быть!
– Смотрите, – и экзаменатор подошёл к симулятору. Разгон, удар по тормозам, управляемый занос, машина встаёт в обратном направлении…
– Братишка, я тебе покушать принёс! Посмотри, чтобы я задом ни в кого не въехал.
После серии тырканий туда-сюда, грузовику удалось-таки припарковаться. СТРАУСТРУП не удержался и задал вопрос водителю по поводу разворота путём управляемого заноса.
– Ты что, только что от нашего клоуна? – сообразил шофёр. – Это он так нашу кадровичку до метро подвозит, ей-то ничего не будет, она всё равно деревянная, а у меня в кузове 20 шестиметровых рулонов сданных телевизоров – побьются.
– Так ведь их же всё равно в утиль.
– Дурак что ли?
– А куда, в Африку?
– Ты ведь работу ищешь? Так? Ну пойдём, попробую поговорить, может, тебя возьмут…
Склад оказался огромным ангаром, забитым под завязку бытовой техникой.
– Вот смотри, – объяснял СТРАУСТРУПУ уже знакомый нам шофёр. – Клиенты один чёрт не помнят, что было год назад. Поэтому мы свозим их барахло сюда, выдерживаем 12 месяцев, потом приделываем шильдик новой модели и в путь!
– То есть как это?
– Ты что, еду сам не покупаешь? Когда у твоих любимых сосисок истекает срок годности, специальная тётка клеит свежую этикетку. Так и у нас… Постой здесь, я перетру с мастером…
СТРАУСТРУП был счастлив – его взяли на работу! Мастер тоже был из… бывших, долго гонял по способам сортировки просроченной продукции, предложил разработать алгоритм обхода склада, спрашивал, почему у них не стек, а очередь. В конце беседы похлопал по плечу:
– В нашем деле прежде всего нужно знать, чем равенство объектов отличается от equals. Клиенты в этом ни бум-бум, а мы этим пользуемся. Выходи после Нового года, будешь менять указатели, тьфу ты, шильдики. Хочешь смузи? Не боИсь, не просроченное… Десятилетней выдержки!..
Так счастливо закончилась эта удивительная история трудоустройства программиста.
А вдруг говностандартизаторы тоже хейтеры?
После чего наступит коммунизм всеобщее благоденствие, и крестопрогеры смогут смотреть на других прогеров как на говно, потому что больше крестокода писать им будет не нужно.
P. S. Правда, к тому времени все программы на всех других языках давно будут писаться нейросетями и искуственными интеллектами, и программисты будут нинужны. Но это уже совсем другая история...
Метушня — с украинского «суета, суетня; хлопоты, хлопотня; суматоха, сумятица; сутолока».
Спонсор этой минутки интересных фактов — проект Wiktionary: https://ru.wiktionary.org/wiki/метушня.
Но подраться не решились.
Если сильно метушиться,
Можно метушни лишиться.
Если метушни лишиться,
Нечем будет метушиться.
UB может приключиться ...
Если UB вдруг приключится,
Нечем будет метушиться.
неактуальная_шутка_про_breaking_bad.тхт