|
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
|
||||||||||||||||
Массив переменной длины, инициализирующийся при компиляции10.06.2022, 17:48. Показов 3917. Ответов 63
Метки нет (Все метки)
Приветствую всех. Вопрос, наверное, элементарный. Но я банально не знаю, что вбить в Яндекс. В коллекции решенных задач такого не нашел. Если такая тема уже была, бросьте ссылку, плиз.
Допустим, есть класс. Внутри класса должен быть массив.
С++ только начал изучать, до этого много работал на C. Там такое невозможно, только так:
Надеюсь, в C++ есть более элегантное решение?
0
|
||||||||||||||||
| 10.06.2022, 17:48 | |
|
Ответы с готовыми решениями:
63
Массив переменной длины массив переменной длины Передать в C# массив переменной длины. |
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
||
| 11.06.2022, 01:09 | ||
|
Все-таки C/C++ гарантирует что элементы массива будут в памяти по порядку. И потом, разве эмбедники/эмбедчики (не знаю, как верно) не делают постоянно крутые хаки, чтобы марсоходы и спутники могли вытворять вещи, первоначально не задуманные? Может, я слишком фантазирую про область, с которой сам не сталкивался. Добавлено через 2 минуты Еще есть вариант с placement new, где сам задаешь куда положить объект. Все конструкторы/деструкторы будут работать.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 11.06.2022, 01:13 | ||
|
В частности часть кода стандартной библиотека именно так и написана. Чтобы не загромождать огромными функциями объвления классов.
1
|
||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 11.06.2022, 01:30 | ||
|
С разделением реализаций-то я угадал хоть? Интересовал просто именно практический смысл.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 11.06.2022, 01:43 | |||
|
1
|
|||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 11.06.2022, 02:08 | ||
|
Уточнял лишь на предмет возможных фишек, о которых не догадывался.
0
|
||
|
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
|
||||||||||||||||||||||||||
| 14.09.2022, 14:49 [ТС] | ||||||||||||||||||||||||||
|
Всем добрый день, опять нужен совет.
Опять наступил на грабли. Создал кастомный буфер.
0
|
||||||||||||||||||||||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||||||||||||
| 14.09.2022, 16:16 | |||||||||||||
|
Но код для эмбедед обычно более утилитарен, нам нет "непонятно какого размера приехавшего json". Например, массив - это может быть просто состояние кнопок панели управления. В модели изделия ABC100 кнопок на панели 10, а в аналогичной модели ABC100 Lux этих кнопок 15 (функций больше). Т.е. "динамичность" размера массива нам как бы нужна, но при сборке прошивки под ту или другую модель мы точно знаем размер этого массива ужа не этапе компиляции. Добавлено через 41 минуту Я бы в случае такой необходимости внутрь Func1() передавал не объект, а указатель на его внутренний буфер и сохраненный в объекте размер. Примерно что-то такое:
Не, во как надо сделать, вообще красиво!
Красота!
0
|
|||||||||||||
|
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
|
|
| 14.09.2022, 18:27 [ТС] | |
|
KSergey9, функции и не нужно знать объем rawData. Она вызывает функции read, write и т.п. Выводить rawData в public - это грубейшее нарушение инкапсуляции на мой взгляд. Если уж нужно, буфер может выполнять return sizeof(rawData) в каком то методе. Сам объект же памяти не лишается от указателя :-)
Добавлено через 5 минут KSergey9, во втором варианте вы просто передвинули проблему на уровень выше. На функцию тоже может быть указатель. Не переделывать же весь вышестоящий код под шаблоны? Плюс получится несколько экземпляра этой функции, расход памяти.
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||||||
| 14.09.2022, 19:16 | ||||||
|
Как вы сделаете в вашем коде - дело ваше. Вы спросили: как синтаксически написать функцию, куда можно было бы аргументом передать Buff разного размера. Я вам привел пример как это можно сделать. Чем вы недовольны? Вы захотели использовать другие языковые средства - пожалуйста. Как их использовать - вам показали в этой ветке. Использовать или нет - дело ваше. Нужна одна реализация функции - используйте подход 1, либо сделайте Func1() просто методом класса-шаблона, тогда проблема с передачей в неё разных вариаций Buff вовсе отпадёт. Добавлено через 3 минуты Если честно, моё мнение: делайте код на старых добрых макросах. Ибо, моё мнение, все эти "шаблоны" - лапша на уши народу. А на самом деле абсолютно те же самые макросы, только в "стильном-молодёжном" синтаксисе. Но это Тс-сс. Я такого не говорил, если что.
0
|
||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||||||
| 14.09.2022, 19:44 | |||||||||||
|
Zhavoronkov5, ниже несколько вариантов, если вы так или иначе хотите, чтобы код на каком-то уровне оставался шаблонным.
Вариант #1
0
|
|||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 14.09.2022, 20:23 | |
|
DrOffset, мне подсказывает чутье, что у автора
func предполагается как некий внешний алгоритм для работы с Buff (через его же интерфейс/методы).Поэтому мне кажется шаблонная реализация функции func, самым простым вариантом.Еще один вариант, создать базовый интерфейс для Buff, достаточный для написания внешних алгоритмов. Все прочие буферы будут наследоваться и поддерживать этот интерфейс. В итоге такие алгоритмы как func, будут в одном экземпляре и принимать только указатель/ссылку на интерфейс. Как в ваших вариантах, только без раздачи указателей. Ну и кончено же назначение этой самой функции (func), определяет насколько необходимо изменять реализацию и конструкцию Buff. А может все же лучше сделать ее методом того же буфера ... Пока ёжик бродит в тумане, остается только гадать...
0
|
|
|
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
|
|||||||||||
| 14.09.2022, 22:51 [ТС] | |||||||||||
|
Боюсь, ёжику от этого не полегчало :-) Впрочем, спасибо за фразу:
Добавлено через 9 минут Возможность поставить брекпойнт внутри - да ради одного этого на С++ и шаблоны надо переходить.
0
|
|||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 14.09.2022, 23:13 | |||
constexpr, и множество вычислений повесить на этап компиляции.Там где это возможно. Тогда и final на Buff стоит установить.
0
|
|||
|
What a waste!
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
|
||
| 14.09.2022, 23:23 | ||
virtual, так что можно переопределять в любом наследнике
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 14.09.2022, 23:27 | |
|
gray_fox, да, запутался, с этой виртуальностью нужно быть внимательным.
Но все же для большей читабельности и определенности, а также предупреждения ошибок : стоит повторить (указать) virtual и override.
0
|
|
|
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
|
||||||
| 14.09.2022, 23:53 [ТС] | ||||||
|
Повторное наследование работает, но коряво.
0
|
||||||
|
Комп_Оратор)
|
||
| 15.09.2022, 00:08 | ||
|
0
|
||
|
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
|
|||
| 15.09.2022, 00:23 [ТС] | |||
|
Небольшую осторожность соблюдать надо, да. Вот, хотел написать на шаблонах, выше даже получилось совместными усилиями. Только громоздко все-таки. Я ожидал, что будет попроще. На самом деле если я сейчас забью и встрою в этот класс std::vector - мир не рухнет, код заработает. А если я не буду vector в процессе ресайзить - все проработает сто лет без сбоев. Память в куче один раз выделится при инициализации системы и все.
0
|
|||
|
Комп_Оратор)
|
|||
| 15.09.2022, 00:46 | |||
|
0
|
|||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 15.09.2022, 08:35 | |
|
0
|
|
| 15.09.2022, 08:35 | |
|
Нужен массив переменной длины с возможностью добавления элементов Ошибка компиляции при работе с float переменной
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|