внутри. Внешне, я знаю его состояние, и делать проверки не хочу. Как мне получить его варианты без проверок? Да, это ансейф.
Зачем тебе тогда enum, если ты это можешь в union запихать и все проверки сами удалятся?
Да скорее уже для дропа. Кстати у меня часть полей из енума/юниона используются как-то и получается новое состояние поля(ну как состояние автомата), надеюсь, там не будут мувиться переменные(именно что байты копироваться)?
а как избежать? Хотя.. то-то и понятно, ведь выйдет трабла, что мы одновременно читаем енум и его записываем. Кстати, а если сделать через указатели, видимо можно сломать?
>а как избежать std::pin Читаешь, обдумываешь примеры.
спасибо. Я вот его понять не могу. Не могу сказать, что прямо вчитывался. Мб я спрошу позже.. я тут сам не знаю, чего хочу =) Хочу на двух стульях усидеть. А да, а вот если я переключаю енум, но, например, его поле String одно в обоих вариантах и в одном месте, то может быть не будет мувиться, а просто останется на своём месте? *точнее не мувиться, а будут копироваться байты.
Во-первых, надо повесить repr(C) или repr(transparent), причём и на enum, и на структуры в enum'е. Во-вторых, если ты случайно сломаешь align, у тебя компилятор вставит паддинг и ты будешь читать мусор. В-третьих, если ты хочешь генераторы, то почитай вот эту вот статью: https://tmandry.gitlab.io/blog/posts/optimizing-await-1/ В-четвёртых, проще не писать такое огромное количество ансейфа руками. Серьёзно, попробуй не писать именно этот код, или хотя бы не делай self-referental структуры там.
хмм. спасибо. как я понимаю, repr(C) для енума зафиксирует поля, что бы раст их не перемешивал. Но мб он и догадается, что бы не вычитывать поле на стек, а затем его записывать в енум. Кстати, транспарент понять не могу.
Из-за отсутствия стабильного ABI скорее всего не догадается. Где-то был issue на эту тему, но мне лень гуглить.
Репр Си делает предсказуемый лейаут, как в Си, очевидно. То есть надо самому его оптимизировать, но будет точно известно смещение и прочее для полей. Транспарент - всё равно что структуры, в которую завёрнуто поле, будто и нет.
С транспарент не понял, поясни подлиннее, пожалуйста.
я ставлю на то что догадается.
Обсуждают сегодня