Size: a a a

2020 June 06

DS

Dmitry Sokolov in pro.cxx
Alex
а вот это классная идея, если компилятор поймёт, никогда не пробовал. Спасибо!
Тем не менее, засфинячить через return type тоже норм. Что эффективней с т.з. компилятора конечно может подсказать шаблон-гуру Андрей Давыдов.
источник

A

Alex in pro.cxx
Спасибо, за последнее время привык сфинячить через фиктивный шаблонный параметр, а про остальные варианты даже не подумал. Так и сделал - это работает, в отличие от того, что я изначально пытался. Но мне кажется, что так код менее изящный, глаз спотыкается.
источник
2020 June 07

ПК

Побитый Кирпич... in pro.cxx
Dmitry Sokolov
Тем не менее, засфинячить через return type тоже норм. Что эффективней с т.з. компилятора конечно может подсказать шаблон-гуру Андрей Давыдов.
Через возвращаемое значение как раз эффективнее по его словам (и экспериментам Ниблера)
источник

A

Alex in pro.cxx
эффективнее в смысле времени компиляции?
источник

E

Eugene in pro.cxx
Кто-нибудь с imgui ботал? Там можно на фоне несколько текстур сразу нарисовать одну за другой?
источник

R

Ruben in pro.cxx
а можно ли создавать объекты C++ по аналогии со структурами C на каком-то своем буфере?
например:
var = (struct someStruct_t*) buf;
источник

R

Ruben in pro.cxx
т.е. чтобы таким образом сериализовать объект и куда-то его передать
источник

R

Ruben in pro.cxx
почему-то думаю что нет, так как внутри классов память может выделяться в куче
источник

D

Danya in pro.cxx
Ruben
почему-то думаю что нет, так как внутри классов память может выделяться в куче
В Си тоже в структурах бывают указатели :)
источник

R

Ruben in pro.cxx
если в С ты положил в структуру указатель куда-то не туда, то СЗБ
источник

R

Ruben in pro.cxx
ну то есть если используешь сариализацию таким способом, то будь добр не держи указатели в структуре
источник

R

Ruben in pro.cxx
короче понял, с тем же вектором такое не прокатит
источник

IG

Ilya Golovenko in pro.cxx
Ruben
а можно ли создавать объекты C++ по аналогии со структурами C на каком-то своем буфере?
например:
var = (struct someStruct_t*) buf;
Я думаю, что тебе нужен  placement new
источник

R

Ruben in pro.cxx
Ilya Golovenko
Я думаю, что тебе нужен  placement new
спасибо
источник

YB

Yarique Belgorodsky in pro.cxx
если любишь рисковать, то
https://en.cppreference.com/w/cpp/utility/launder
источник

YB

Yarique Belgorodsky in pro.cxx
))
источник

R

Ruben in pro.cxx
и сразу еще вопрос, насколько можно использовать структуры для сериализации в буфер в С++?
То есть создаем структуру:
struct packet_t {
uint16_t  one : 4;
uint16_t  two : 6;
uint16_t  three : 6;
uint16_t  four : 16;
} __attribute__((packed));

Далее пишем:
auto packet = static_cast<packet_t*>(buf);
.......

То есть заполняем буфер через структуру. В С это повсеместная практика, а насколько опасно так делать в плюсах? В структуре гарантировано нет определенных программистом методов, и она с атрибутом packed
источник

YB

Yarique Belgorodsky in pro.cxx
Ruben
и сразу еще вопрос, насколько можно использовать структуры для сериализации в буфер в С++?
То есть создаем структуру:
struct packet_t {
uint16_t  one : 4;
uint16_t  two : 6;
uint16_t  three : 6;
uint16_t  four : 16;
} __attribute__((packed));

Далее пишем:
auto packet = static_cast<packet_t*>(buf);
.......

То есть заполняем буфер через структуру. В С это повсеместная практика, а насколько опасно так делать в плюсах? В структуре гарантировано нет определенных программистом методов, и она с атрибутом packed
C-cast в плюсах не рекомендуется делать)
источник

YB

Yarique Belgorodsky in pro.cxx
используй плюсовые касты)
источник

R

Ruben in pro.cxx
раньше обсуждали вроде, что в плюсовой структуре может быть еще таблица виртуальных методов и иная инфа, скрытая от программиста.
источник