|
0 / 0 / 1
Регистрация: 01.03.2017
Сообщений: 32
|
||||||
Передача типа переменной через аргумент функции16.10.2017, 19:01. Показов 11146. Ответов 28
Метки нет (Все метки)
Стоит задача: реализовать свой вариант динамических массивов без использования STL(т.е. без new, как я понимаю). При этом должно работать не только для стандартных типов данных. Я решил, что память буду выделять malloc-ом, но столкнулся с проблемой. Если бы нужно было реализовывать только для стандартных типов, то я бы просто перегрузил функцию для разных типов, но тогда это не будет работать для пользовательских типов.
Думал сделать как-нибудь через шаблоны, что-то типо:
0
|
||||||
| 16.10.2017, 19:01 | |
|
Ответы с готовыми решениями:
28
Передача строки через аргумент |
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||||||||||||
| 17.10.2017, 15:05 | ||||||||||||||
A::operator int(), хотя в самом выражении в явном виде никаких операторов нет.Поэтому фраза выше, в общем-то, совершенно точно описывает что происходит. new-expression разрешается в выполнение оператора new и возможный вызов конструктора (или конструкторов) в случае нетривиального типа. В стандарте даже есть отдельные примеры:
Оператор тут - это operator new(std::size_t); А операнд - это sizeof(int). Можно заметить, что в третьем издании (которое 55 советов) этого же автора уже нет упоминания о какой-либо сложности. Т.к. в стандарте на тот момент уже устаканилась вся терминология. В третьем издании вся терминология приведена к стандартной, в частности там, где new рассматривается как выражение, используется термин new-expression. Вот пример из правила 16:
1
|
||||||||||||||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
| 17.10.2017, 16:01 | |
|
Если вам так неймется, переопределите placement new. Вам его за глаза хватит.
Добавлено через 2 минуты И то только потому, что язык почему-то запрещает явный вызов конструктора. Так бы можно было и без placement new обойтись.
0
|
|
|
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
|
||
| 17.10.2017, 16:11 | ||
0
|
||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
| 17.10.2017, 16:50 | |
|
Зачем для произвольного то типа?
0
|
|
|
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
|
||
| 17.10.2017, 16:57 | ||
0
|
||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
| 17.10.2017, 17:05 | |
|
Через шаблон.
Дело в том, что ТС неправильно понял своё задание. Его всего-то попросили разработать аналог класса std::vector. Никто не говорил, что при этом нельзя использовать оператор new. Формально реализация оператора new входит в стандартную библиотеку (Надо сказать, что это даже не stl, но шут с ним). Если мы хотим сделать своё vector, не используя вообще ничего из стандартной библиотеки, нам, так или иначе придётся вызывать конструкторы через placement new. Если мы не хотим тянуть его из стандартной либы мы можем написать ему свою реализацию. Вот такая логика.
0
|
|
|
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
|
|||||||
| 17.10.2017, 20:19 | |||||||
|
ТС приводил тут задание:
![]() Добавлено через 9 минут Как-то я писал свой шаблонный вектор. Давно это было правда, но все работало.
0
|
|||||||
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
||
| 17.10.2017, 20:33 | ||
|
DrOffset:
т.е. сперва ты говоришь что new - это не оператор, а выражение. (с частным случаем выражения можно согласится, потому как попадает под определение последовательности операторов и операндов). потом это у тебя уже все-таки оператор. упорно игнорируешь наличие такого понятия как new оператор, подменяя это выражением (new-expression), хотя new operator входит в состав той самой последовательности операторов и операндов, которые образуют выражение согласно определению в стандарте. далее идет отсылка на new-expression с "неявным выполнением оператора new". окей, из-за пачки примеров можно понять, что ты имел в виду вызов функции operator new, а не всего, что происходит помимо вызова этой этой функции, конструированием, отслеживанием исключений, освобождением памяти в случае чего. без пояснений это можно понимать по разному и в некоторых контекстах эта разница имеет значение. путаница имеется, и спустя пару сообщений уже признаешь это. сам факт этого диалога тоже об этом свидетельствует. автор по инфе из википедии не понял, что там речь идет о функциях operator new, а не о new операторе, который в составе new-expression. Если заниматься буквоедством и мою фразу:
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||||||||||||
| 17.10.2017, 23:49 | |||||||||||||||||
operator new. Никакого противоречия нет. Я всегда из сообщения в сообщение говорил одно и то же.
![]()
1. A a; - тут ++ это оператор?2. int A::operator++(int); - а это?А если я напишу явно: a.operator++(0); - что-то изменится?Вот давай мы пойдем в параграф с упомянутой тобой выше табличкой (Operators and punctuators ). Там написано:
Вот этим всем Конструирование:
1
|
|||||||||||||||||
| 17.10.2017, 23:49 | |
|
Передача функции в аргумент
Передача динамического массива как аргумент функции
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|