ФлеймФорумПрограммирование

Общие вопросы по программированию (1329 стр)

Страницы: 11328 1329 1330 13311343 Следующая »
#19920
12:57, 10 янв 2026

Имбирная Ведьмочка
> то я не буду заботиться дочитывать его до конца.

Да без проблем.

#19921
13:12, 10 янв 2026

Охтыж я прозрел!!!
Естественно возник вопрос - а что творится в COM где тоже интерфейсы интерфейсами погоняют, но нечто реализованное на C++?
Ведь если ком-класс реализует два разных интерфейса, что легально, то он неизбежно столкнётся с тем что в обоих интерфейсах надо реализовать AddRef/Release.
Естественно ожидать что нужно виртуальное наследование чтобы перекрыть одной и той же реализацией.
А нихрена подобного! В COM вообще нигде в базисе реализации на C++ не используется множественное наследование.
Опять таки кофе выпало изо рта - как так?
Так вот оказывается в C++ есть правило которое если я и знал, то забыл десятилетия назад - что если есть абсолютно одинаковый виртуальный метод в двух разных базах, то перекрывая его в производном классе ты автоматически перекрываешь обе реализации и иначе сделать невозможно!
И вот за счёт этого правила в COM без виртуального наследования работает поддержка множественных интерфейсов.
Прикольно.

#19922
16:58, 10 янв 2026

Блин, я прям даже просветлел - я годами думал что механизм COM он какой то ну сложный - что под капотом там виртуальное наследование и какие то еще подкапотные механизмы.
А там нихрена - просто слоты для каждого интерфейса реализованного и всё. И в каждом слоте просто все интерфейсы отнаследованные повторяются если встречаются в любой другой ветке "грозди". И всё.
То что я придумывал на прошлой странице сложнее, но потому что и умеет сложнее.
Мда уж.

#19923
21:17, 10 янв 2026

я бы не стал говорить, что COM, это что-то на крестах
com, это abi соглашение: https://ru.wikipedia.org/wiki/Microsoft_Component_Object_Model_Interface

"интерфейс бинарно работает вот так"

интерфейсы вполне себе реализуются и через Си, просто передавая указатель на рекорд, который состоит из указателей на функции

#19924
13:18, 11 янв 2026

skalogryz
> com, это abi соглашение

Да, но реализовано оно вокруг того как MS VC++ делает раскладку объектов в памяти. Это не совпадение, а фича.
На самом деле даже неплохо получилось - переделка кода на Си совсем несложная.

#19925
15:12, 11 янв 2026

А самый-самый COM язык - это, внезапно, Visual Basic 6. Там всё ООП - это автоматически COM.

#19926
16:11, 11 янв 2026

Mikle
> А самый-самый COM язык - это, внезапно, Visual Basic 6. Там всё ООП - это автоматически COM.

Мне даже интересно - это MS Basic подгоняли под DCOM или DCOM подгоняли под MS Basic.
Насколько я подозреваю managed string BSTR в DCOM это сокращение от Basic string.
Что забавно - 1С пошла по тем же стопам и уже в 1С 7 все программные объекты то ли отображались то ли тоже реально являлись по сути своей COM-объектами, только не DCOM, а свой велосипед именуемый как то типа 1C Extensions - можно было из внешней программы залезть в программную среду 1С используя эти COM-интерфейсы и не только пользовать сами объекты, но и интегрироваться в среду.
Суть ровно та же - некий интерфейс а-ля IDispatch через который можно вызывать методы объекта упрощенно как Invoke(method_name, params_array, outputs_array);

#19927
12:06, 12 янв 2026

Имбирная Ведьмочка
Он не тормоз ... Он медленный газ :)

#19928
(Правка: 8:27) 8:24, 21 янв 2026

Здравствуйте! Может кто делал представление на bitset, где в качестве смещения используются биты, а не байты
Интересует реализация методов merge/crop или union/intersect, не знаю как правильно их обозвать :D
Например: bitsetA(offset 0):merge( bitsetB(offset 3bit) )

#19929
9:48, 21 янв 2026

SleepyHardbass
а что эти методы должны делать с битами то?

#19930
(Правка: 11:56) 10:01, 21 янв 2026

Вий
Вернуть новый bitset, где для каждого чанка/слова было выполнено ~сравнение~ битов
merge: bitsetA | bitsetB; crop: bitsetA & bitsetB

+ LuaCode

UPD:
Нашел реализацию на Go, может там будет понятнее bitset.go

UPD2:
Если никто подобными извращениями не занимался, то и не надо
Я сам что-нибудь придумаю (хотелось увидеть как это делают дргуие, т.е без лишних телодвижении в цикле - SHR(bits, offset), AND(bits, SHL(1, offset) - 1) и тому подобное

#19931
20:46, 26 янв 2026

А чо std::is_arithmetic для bool, char, wchar_t, char8_t, char16_t, char32_t возвращает Ъ, он пьян?

#19932
21:17, 26 янв 2026

nes
> А чо std::is_arithmetic для bool, char, wchar_t, char8_t, char16_t, char32_t возвращает Ъ, он пьян?
Потому что

template<class T>
struct is_arithmetic : std::integral_constant<bool,
                                              std::is_integral<T>::value ||
                                              std::is_floating_point<T>::value> {};

а про std::is_integral мы уже выясняли
https://gamedev.ru/flame/forum/?id=248221&page=19&m=5082367#m277

#19933
(Правка: 20:52) 20:46, 14 фев 2026

Приложение зависает при вызове exit, abort или terminate.
Как из кода уронить процесс, чтоб наверняка?
Отладчик говорит, что висит в ntdll!ZwWaitForMultipleObjects.

#19934
10:37, 15 фев 2026

Dimich
гугл аяй модо:

+ Показать

тлдр: TerminateProcess(GetCurrentProcess(), 1)

Страницы: 11328 1329 1330 13311343 Следующая »
ФлеймФорумПрограммирование