Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 280 281 [282] 283 284 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4216
,
|
|
|
|
Цитата Radagast @ Считай, что их там нет вообще. Алгоритмы авионики не работают с данными неизвестного заранее размера по той же самой причине, а значит динамическая память не нужна, все размеры просчитываются в статике. Вот неизвестное заранее количество данных фиксированного размера - пожалуйства, но это легко раскидывается по тайм-слайсам, и опять же в статике всё считается.в авионике аллокаторы С++ выделяют и освобождают память за строго определенное время? Если же вдруг оказывается, что всё-таки нужна, потому что так проще, делается свой простой менеджер и натравливается на пул статичного размера. Обычно такой менеджер работает с fixed-size блоками и не ворочает большыми объёмами. Его несложно оценить по верхней границе затрат ресурсов процессорного времени, и работает он фактически за констанстное время. Но реально я с необходимостью такого нигде не сталкивался. Просто обходятся без динамики. Добавлено А, ну amk вот уже сказал про крайний случай. |
|
Сообщ.
#4217
,
|
|
|
|
Уверен? Даже мало-мальского? А автоматический вызов конструктора предка из производного класса? ОМГ, какой страшный говнокод! ![]() ![]() begin if A = B then Exit(0); if A.InheritsFrom(B) then Exit(-1); if B.InheritsFrom(A) then Exit(1); raise Exception.Create(''); end; Ну приведи аналог только этой части. |
|
Сообщ.
#4218
,
|
|
|
|
DesweR, это в compile-time делается. А в run-time будет так же.
|
|
Сообщ.
#4219
,
|
|
|
|
Цитата Qraizer @ DesweR, это в compile-time делается. Это как раз неизвестно в compile-time. Цитата Qraizer @ А в run-time будет так же. Как? |
|
Сообщ.
#4220
,
|
|
|
|
Как раз-таки в compile-time уже всё известно. Или в Дельфи можно деревья классов иерархировать прям на лету?
Цитата DesweR @ Та так же:Как? ![]() ![]() { if (isSame <A, B>::value) return 0; if (isDerived<A, B>::value) return -1; if (isDerived<B, A>::value) return 1; throw std::logic_error(""); } ![]() ![]() class Base{}; class A: Base{}; class B: Base{}; |
|
Сообщ.
#4221
,
|
|
|
|
Цитата Qraizer @ Как раз-таки в compile-time уже всё известно. не совсем, в его коде A и B -- классовые переменные, значения которых изменяются в рантайме Добавлено Цитата Qraizer @ Та так же: ![]() ![]() { if (isSame <A, B>::value) return 0; if (isDerived<A, B>::value) return -1; if (isDerived<B, A>::value) return 1; throw std::logic_error(""); } хотелось бы увидеть определение isSame или isDerived |
|
Сообщ.
#4222
,
|
|
|
|
Цитата korvin @ не совсем, в его коде A и B -- классовые переменные, значения которых изменяются в рантайме В дельфи из-за отсутствия шаблонов в compile-time ничего и не делается. Им по-видимому процессора конечного пользователя не жалко |
|
Сообщ.
#4223
,
|
|
|
|
korvin, как там с классовыми переменными, мне неведомо. Думаю, дело не в этом, дело в том, дженерики у них такие. Ну так я за Дельфи ничего не говорил. Я за Плюсы говорил. У нас все типы известны на момент компиляции. Я ж говорил, что отсортирую список типов компилятором. Что удивительного в этом утверджении?
Цитата korvin @ Не испугаешься?хотелось бы увидеть определение isSame или isDerived ![]() ![]() template <typename X, typename Y> struct isSame { enum { value = false; }; }; template <typename T> struct isSame<T, T> { enum { value = true; }; }; template <typename D, typename B> class isDerived { typedef char (&small_type)[1]; typedef char (&big_type) [2]; template <typename T> static small_type check(const volatile D&, T); static big_type check(const volatile B&, int); struct Proxy { operator const volatile B&() const; operator const volatile D&(); }; public: enum { value = sizeof(check(Proxy(), 0)) == 1 }; }; |
|
Сообщ.
#4224
,
|
|
|
|
Цитата Qraizer @ Да, isDerived<> страшен, но это пока его не объяснят тому, кто впервые с таким сталкивается. И isSame<> несколько неполон, ибо не учитывает const/volatile модификаторов и ссылок. Но не факт, что это всегда будет требоваться от isSame<>, поэтому грамотнее const/volatile и ссылочность учитывать отдельно. мда... имхо он в любом случае страшен, много (видимо необходимого в плюсах) мусора =/ а дженерики там не при чем |
|
Сообщ.
#4225
,
|
|
|
|
Цитата Qraizer @ Ну так и написан он не для того, чтобы на него любовались. Главное задачу свою решает. Проверяет, что первый тип унаследован от второго. Да, isDerived<> страшен |
|
Сообщ.
#4226
,
|
|
|
|
korvin, а что сложного-то? Тут практически везде работают аналоги паттерн матчинга. Считай просто функции времени компиляции.
|
|
Сообщ.
#4227
,
|
|
|
|
Цитата D_KEY @ korvin, а что сложного-то? Тут практически везде работают аналоги паттерн матчинга. Считай просто функции времени компиляции. сложности тут в наличии большого количества мусора. мне также не понятно, какова роль этих сущностей: ![]() ![]() template <typename T> static small_type check(const volatile D&, T); static big_type check(const volatile B&, int); struct Proxy { operator const volatile B&() const; operator const volatile D&(); }; и что представляет из себя check |
|
Сообщ.
#4228
,
|
|
|
|
korvin, check() ничего не представляет. Ты видишь полный текст метафункции isDerived<>. А роль тех сущностей в определении взамоотношений D и B между собой и правил перегрузки.
|
|
Сообщ.
#4229
,
|
|
|
|
А зачем в операторе proxy нужен volatile?
|
|
Сообщ.
#4230
,
|
|
|
|
Цитата Qraizer @ korvin, check() ничего не представляет. Ты видишь полный текст метафункции isDerived<>. А роль тех сущностей в определении взамоотношений D и B между собой и правил перегрузки. вот я и не понимаю, как определяется отношение, зачем нужен Proxy, и что означает check(Proxy(), 0), т.к. из определения check мне вообще непонятно, что это |