Недавно задали лабораторную домой по с++. Перерыл почти весь интернет но ответ на один вопрос так и не нашёл.
Условие: у меня есть односвязный список, в нем несколько информационных полей. Есть поле "ИМЯ" с динамически выделенной памятью, вот с ним и проблема: нужно разрешить пользователю изменить его тип на [char/int/float/double]
. Это вроде не сложно, а вот вторая часть меня просто убила: нужно разрешить пользователю изменять количество байт, которые были выделены ранее. Такое вообще возможно осуществить?
Ну, я бы воспользовался такой штукой, как any
или (как я подозреваю, именно это требуется) объединением (union
). Конечно, нужно тягать дополнительное поле типа etc. Это - если бы была только первая часть задания (менять тип поля).
Судя по второй части - менять размер - мне кажется, что от вас ждут поля типа void*
, или char*
, память для которого выделяется как new char[size]
, а потом используется приведение к нужному типу (ценителей чистоты strict alias прошу не беспокоиться :)). Сложно, многословно, непонятно, зачем - но задания преподов часто необъяснимы :)
Т.е. что-то вроде
enum types { INT, CHAR, .... };
void * p = new char[sizeof(int)];
types t = INT;
// Работаем с *(int*)p как с int (см. значение t)
// Переключение на double
delete[]p;
p = new char[sizeof(double)];
t = DOUBLE;
"По-моему, так" (с) Пух
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Проблема заключается в том, что после добавления градиента для блокаlogo перестал работать border-radius
Как сделать такую шапку? Использовать еще сетку (в моём примере Zurb Foudation) как на картинке