Оригинальный заголовок статьи (I Have No Constructor, and I Must Initialize) отсылает к названию рассказа Харлана Эллисона "I Have No Mouth, and I Must Scream", и перевести его стоило бы не в таком стиле, как у вас.
Представьте, если бы название рассказа переводили бы как "Рта у меня нет, а кричать надо" (название совпадает с завершающими словами рассказа, где сверхразумный военный ИИ уничтожил человечество и пытает последнего человека).
Клиентский код не всегда может вызывать конструкторы -- например, мы можем хотеть иметь возможность подменять тип создаваемого объекта или клиентский код может не иметь значений параметров. В данном же случае фабрике из клиента передаётся и тип, и параметры. Точнее, ID типа, но он взаимно однозначно соответствует типу.
Для выноса бойлерплейта достаточно шаблонной функции в три строчки, а в случае передачи этой фабрики извне я опять же не понимаю зачем.
Возникает следующий вопрос: а как мы можем абстрагировать, отделить способ создания от самого объекта?
У меня возникает другой вопрос: зачем? В какой ситуации код
using VF = VariantFactory<Point, Line, Rect>; using ShapeType = VF::ResultType; ShapeType shape; VF{}( &shape, kUniqueId<line>, 1, 1, 4, 5); будет лучше, чем две строки ниже?
Смотреть надо не на километры, а на delta-V (она же характеристическая скорость орбитального манёвра). Нужно примерно 4 км/c дельта-вэ , чтобы перейти от орбиты 450 км на геостационарную. Это меньше половины дельта-вэ, нужной, чтобы добраться до орбиты 450 км.
"каждый проект, с которым я имел дело на C++, ощущался как монотонная рутина"
Значит, автор решал в своих проектах скучные задачи. Когда задача скучная, начинаешь играть с языком, чтобы хоть как-то веселее писать было. Для интересной задачи лучше, когда выражение идей в коде -- тривиальный процесс, а не квест.
Безусловно.
Спасибо за ссылку.
Вы, кстати, ответив на этот вопрос, испортили мне аргумент)
Как ни странно, я бы назвал вот эту, задай мне кто-нибудь этот же вопрос: www.palgrave.com/gp/book/9781137573490
Согласитесь, что есть огромная разница в степени этого непонимания между родным языком и языком, на котором вы читаете «полгода-год». Через десять лет эта разница уменьшится, но для подавляющего большинства людей она останется существенной.
Вот так: fregimus.livejournal.com/19603.html
Не подтверждают, конечно же, но идентификация чего-то как исключения из правила говорит о том, что есть и правило, которое в целом выполняется.
Оригинальный заголовок статьи (I Have No Constructor, and I Must Initialize) отсылает к названию рассказа Харлана Эллисона "I Have No Mouth, and I Must Scream", и перевести его стоило бы не в таком стиле, как у вас.
Представьте, если бы название рассказа переводили бы как "Рта у меня нет, а кричать надо" (название совпадает с завершающими словами рассказа, где сверхразумный военный ИИ уничтожил человечество и пытает последнего человека).
https://ru.wikipedia.org/wiki/У_меня_нет_рта,_но_я_должен_кричать
Клиентский код не всегда может вызывать конструкторы -- например, мы можем хотеть иметь возможность подменять тип создаваемого объекта или клиентский код может не иметь значений параметров. В данном же случае фабрике из клиента передаётся и тип, и параметры. Точнее, ID типа, но он взаимно однозначно соответствует типу.
Для выноса бойлерплейта достаточно шаблонной функции в три строчки, а в случае передачи этой фабрики извне я опять же не понимаю зачем.
У меня возникает другой вопрос: зачем? В какой ситуации код
using VF = VariantFactory<Point, Line, Rect>;
using ShapeType = VF::ResultType;
ShapeType shape;
VF{}( &shape, kUniqueId<line>, 1, 1, 4, 5);
будет лучше, чем две строки ниже?
using ShapeType = std::variant<Point, Line, Rect>;
ShapeType shape{std::in_place_type_t<Line>, 1, 1, 4, 5};
Кроме дельта-вэ важна ещё и плоскость орбиты, кстати.
Смотреть надо не на километры, а на delta-V (она же характеристическая скорость орбитального манёвра). Нужно примерно 4 км/c дельта-вэ , чтобы перейти от орбиты 450 км на геостационарную. Это меньше половины дельта-вэ, нужной, чтобы добраться до орбиты 450 км.
Я думаю, любой документированный набор инструкций проца проще плюсов.
"каждый проект, с которым я имел дело на C++, ощущался как монотонная рутина"
Значит, автор решал в своих проектах скучные задачи. Когда задача скучная, начинаешь играть с языком, чтобы хоть как-то веселее писать было. Для интересной задачи лучше, когда выражение идей в коде -- тривиальный процесс, а не квест.
Справедливости ради, dllmain триггернулся после комментария с совершенно хамским и не менее надменным скриншотом из твиттера: https://habr.com/en/companies/ruvds/articles/747826/comments/#comment_25755608
Главное, не складывать числа с плавающей точкой)
https://ru.wikipedia.org/wiki/Алкиона_(дочь_Эола)
А зачем std::launder в седьмом варианте? Можно же использовать указатель, возвращаемый new, не?
[[nodiscard]] float int_to_float7(int x) noexcept
{
return *new(&x) float;
}
UC Berkeley's online course catalog once listed a physics course where one of the textbooks was written by Landau and Lif****s
Спасибо, возможно, эта книга интереснее, чем The Making of the Atomic Bomb Paperback by Richard Rhodes, которую я тоже пока так и не прочитал)
Спасибо за ссылку.
Вы, кстати, ответив на этот вопрос, испортили мне аргумент)
Как ни странно, я бы назвал вот эту, задай мне кто-нибудь этот же вопрос: www.palgrave.com/gp/book/9781137573490
Не подтверждают, конечно же, но идентификация чего-то как исключения из правила говорит о том, что есть и правило, которое в целом выполняется.