Перейти к содержанию
    

3 hours ago, jenya7 said:

А что С++ генерик тип <T> не отжирает память?

Нет. Он просто строит код для каждого типа данных, который используется в программе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 minutes ago, AndyBig said:

И, честно говоря, я так и не понял какой цели нужно достичь с помощью всего этого колдунства.

Этот вопрос уже тут звучал. Но секретнейший военный проект не подразумевает никакого разглашения:

все имена изменены на вымышленные, а применяемые решения заменены кринжовыми union подходами с void указателями и некими вымышленными "дженериками".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, jenya7 сказал:

С инициализацией проблем нет

void *generic;
uint8_t flag[8];

generic = &flag[4];

Вопрос как передать значение по типу данных. без дополнительных индикаторов (переменных) типа данных.

если бы работал каст

(uint8_t *) generic = &flag[4];

можно было сделать так

int size = sizeof(generic);
    
if (size == 1)
    (*((uint8_t *)generic)) = val;
else
    (*((int *)generic)) = val;

есть какой то метод или всё пропало?

В случае с функцией на CPP можно было бы рассмтривать шаблоны, но сильно сомневаюсь :biggrin: что это сэкономило бы 100 байт.

В любом случае, "частное" решение (как выше предлагается с type_id) будет эффективнее чем универсальное. По крайней мере "скорее всего". Сам использовал изворот как в нижней части цитаты, но не при присваивании значений переменных, а для  присваивания "типовых" указателей из * void.

switch( type_id) . . . . . 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 27.12.2022 в 19:30, tonyk_av сказал:

Нет. Он просто строит код для каждого типа данных, который используется в программе.

а как же тогда работает dynamic_cast?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, gridinp said:

а как же тогда работает dynamic_cast?

В код помещается дополнительная информация о типах, что заметно увеличивает его.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 28.12.2022 в 06:30, tonyk_av сказал:

В код помещается дополнительная информация о типах, что заметно увеличивает его.

информация о типе есть в самом объекте, получить её можно через typeid, правда это касается только полиморфных типов, т.е. у которых есть таблица виртуальных функций

Изменено пользователем gridinp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 minutes ago, gridinp said:

у которых есть таблица виртуальных функций

ТС привел типичный сишный код, для которого, судя по всему, даже "+100 байт памяти" - уже настоящая трагедия 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я понял, ТС хочет динамически определять какой тип данных он поместил ранее по указанному адресу памяти и при этом не тратить память на хранение этой информации. Утопия...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, AndyBig said:

Утопия...

Лишь для случая, когда ВСЕ таблицы и индексы хранятся только в ОЗУ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Forger said:

ТС привел типичный сишный код

Поэтому я и предложил перегруженные функции или шаблоны, чтобы сохранить функциональный стиль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 minutes ago, Forger said:

Лишь для случая, когда ВСЕ таблицы и индексы хранятся только в ОЗУ...

А как еще хранить динамические данные?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, AndyBig said:

А как еще хранить динамические данные?

А все ли данные там динамичные и предполагают изменения в рантайме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Forger said:

Лишь для случая, когда ВСЕ таблицы и индексы хранятся только в ОЗУ...

Если объект создаётся в динамической памяти, то, ессно, информация о его типе будет храниться тамже, в ОЗУ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

58 minutes ago, tonyk_av said:

сохранить функциональный стиль.

Понятие "стиля" тут утеряно на первом же операторе приведения типа к указателю void* 😎

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Forger said:

А все ли данные там динамичные и предполагают изменения в рантайме?

Если они в ПЗУ, то тогда у ТС не было бы вопроса с передачей типа данных, храни себе в ПЗУ и мозг людям не мучай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...