Vladislav
Dumitru
они придумали свои, кажется в 16 веке ввели новую письменность так как использовали китайские, а они сложные и не все могли себе позволить такое образование
Dumitru
вообще можно выучить весь корейский алфавит за 1 день
Detur
тоже себе сменщика хочу
Square
От дальнего востока до калифорнии...
у меня ещё был в одном чате знакомый из Блумберг, но щя пропал как то в телеге
Dumitru
Михаил
А не подскажете, что использовать вместо char data[0] в структуре? Чтобы и работало так же, и компилятор не выдавал предупреждение.
Vladislav
Михаил
Нулевой размер указывается для получения размера структуры в sizeof(). Через malloc() выделяется буфер под структуру и под нужное количество данных. char data используется как указатель на начало данных.
🦥Alex Fails
Vladislav
Vladislav
нужный размер только в runtime известен?
Vladislav
если нет, лучше сделать шаблонную структуру
Vladislav
типа template <int size> struct {..., char data[size]; }
babysitter
data[1] в винде вроде повсеместно
babysitter
о, нагуглилось довольно бытро
https://blogs.msdn.microsoft.com/oldnewthing/20040826-00/?p=38043
Михаил
Блин, или идеальный вариант data[0] и предупреждение, или костыль FIELD_OFFSET, и все нормально.
Vladislav
🦥Alex Fails
Михаил
Вектор тут точно не нужен, тащить лишний код.
Vladislav
а грязные хаки нужны?
Михаил
Так чистых нет.
babysitter
для системного программирования понятие хаков немного сглаживается :D
например я не уверен, что программируя под винапи люди всегда используют с++ style касты, хотя это нехорошо. сишники вообще мастера костылей, конкретно это решение вполне узаконено, почему бы и нет
Vladislav
можно подробнее про use-case?
Vladislav
babysitter
data[1]
babysitter
ноль не нужен
🦥Alex Fails
0 нестандартный ext. В винде вроде бы не собирается
Vladislav
к слову, даже в C это UB: http://stackoverflow.com/a/3711287/457227
babysitter
good to know
Square
Михаил
Как привести один тип к другому? class C{ A a; B b; } Есть B *b, как получить C? C *c = b; не работает. Пока только вариант руками сдвинуть указатель на -sizeof(A);
Andrey
Stanislav
Denis
Крылатый
Крылатый
Правда, решение так себе. Как и задача. ._.
Крылатый
._.
Andrey
Михаил
Вспомнил, что приведение работает через наследование, но у меня базовый тип int и от него наследовать не получается.
Крылатый
Базовый тип — int,
Крылатый
Это как?
Andrey
Это как?
да он ваще опасный чувак )
Михаил
В class C{ A a; B b; } B - int. И перестроить структуру в class C : public A, public B{}; не получается.
🦥Alex Fails
template <typename T>
class MyT : T {};
MyT<int> myInt;
Крылатый
Михаил
У меня винда, этим все сказано: Ошибка error C2516: T: не является допустимым базовым классом.
Kirill
Сегодня день извращений в чате? 🤔
Andrey
Крылатый
Кстати, про извращения.
Крылатый
Где там Толик...
Михаил
Местная знаменитость?
Крылатый
Нет.
babysitter
reinterpret_cast же для такой грязи и придумали, зачем упираться? так-то можно и си-стайл каст нарисовать, если не одобряешь. наследование здесь даже больший костыль, чем очевидное решение
Stanislav
нужно больше охренительных советов
Denis
Ору Вголос просто)
Andrey
babysitter
а, я еще и не понял задачу похоже
Kirill
Denis
Смотри, а попробуй через смещение на поле)
&C::a
babysitter
offset_of
Михаил
Обычный каст и смещение вполне сойдут для сельской местности, работает и ок.
У меня дальше планы на указатели с захватом и блокировкой объекта, вот где можно развернуться.
Kirill
babysitter
int* b_ptr = &c.b;
C* c2 = (C*)((char*)b_ptr - offsetof(C, b));
Kirill
Надеюсь, этот код никому не придется поддерживать.
🦥Alex Fails
Stanislav
babysitter
Kirill
Kirill
Жесть
Kirill
А ведь наверняка все из-за того, что архитектура неправильная.
Kirill
Или в голове каша.
Andrey
Или в голове каша.
да мож человек просто мучает С++ :-/ я надеюсь, по крайне мере ))
Andrey
иначе это все ад )
Kirill
и может там тонна легаси кода и сквозь миллионы уровней бизнес логики проходит этот указатель на инт ,и вот так извратиться это единственный выход
Kirill
мы же не знаем всей предыстории)
Kirill
Не в обиду человеку, но я не удивлюсь, если это окажется в каком-то рабочем проекте.