|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||
Массив шаблонов30.03.2024, 16:40. Показов 4460. Ответов 79
Метки нет (Все метки)
Всем привет
я адинесник прошу не пинать ![]() захотелось как и в адинес добавлять в массив любые типы возникает вопрос можно ли создать или объявить как то массив [] с фиксированной длиной при инициализации указав все элементы но скажем так массив указателей на разные типы. ведь как я понял указатель то имеет одинаковую природу и величину - какая разница на что указывать. т.е хочу создать массив указателей на произвольные объекты, т.е. аналогично шаблон функции
можно ли создать такое типа auto arr[2] ={&s1, $s2}; Добавлено через 2 минуты неожиданно получилось вот так
0
|
|||||||||||
| 30.03.2024, 16:40 | |
|
Ответы с готовыми решениями:
79
Разреженный массив (с использованием шаблонов), исключение оператора посредством SFINAE Массив шаблонов или как обратиться к элементам разного типа, хранящиеся в одном "списке" по индексу Использование шаблонов |
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||
| 04.04.2024, 15:08 | |||||||
|
Указатель кроме хранения адреса ещё и имеет размер типа, на который он указывает. Что позволяет производить над ним арифметические операции. Например :
++st_ptr - адресс изменится на sizeof(str) Очевидно же, что указатель - это не просто адресс памяти.
2
|
|||||||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 04.04.2024, 17:07 [ТС] | ||
|
на то он и указатель.
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 04.04.2024, 17:59 | ||
|
Однако с точки зрения языка С++ это не более чем совпадение. Еще раз: с точки зрения языка С++ все указатели имеют (могут иметь) разную природу, в том числе и разную величину. Компилятор языка С++ следует правилам языка С++. Ему не интересно, что там вам говорит ваш опыт, каким бы он ни был.
0
|
||
|
"C with Classes"
|
|
| 04.04.2024, 18:53 | |
|
0
|
|
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|
| 04.04.2024, 22:30 [ТС] | |
|
0
|
|
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
||||||||||
| 05.04.2024, 14:13 | ||||||||||
Добавлено через 3 минуты Добавлено через 12 минут
0
|
||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||
| 05.04.2024, 14:25 | |||||||
|
Есть ещё указатели на функции и функции-члены класса. На их размеры погляди.
Тем не менее, это указатель. Хотя я согласен, что в контексте, мы обсуждали указатели именно на данные. Но что-то мне кажется что TheCalligrapher, не спроста завел разговор о возможно разной "величине" (хоть я сразу и не понял что это о размере) указателей. Добавлено через 4 минуты
0
|
|||||||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
||||
| 05.04.2024, 14:30 | ||||
|
1
|
||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 05.04.2024, 14:45 | |||
|
Это то что касается непосредственно указателей.
0
|
|||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
||||
| 05.04.2024, 14:58 | ||||
|
К тому же, при таком подходе:
1
|
||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||
| 05.04.2024, 15:40 | ||||
|
Например :
Добавлено через 4 минуты Есть уточняющие вопросы ? - Будут ответы. (если я их знаю) Хотя судя по вам, вам ничего не нужно кроме срача.
0
|
||||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 05.04.2024, 16:04 [ТС] | ||
|
но все таки и создать тоже задача есть, если например помещать туда тип через тип массив указателй на разные типы и помещать в него *тип1, *тип2, *тип1 , *тип2 размер типов я знаю. итерацию же смогу реализовать? образно(сейчас такой задач не стоит, просто пофилософствовать)
0
|
||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
|||||||
| 05.04.2024, 16:28 | |||||||
|
То же самое есть/было в том же x86 - как там это называется, "короткие переходы"? Я не помню. Влияет ли наличие подобного на размер указателя на функцию? Нет. И да, как забавно проигнорирована часть моего поста. Совершенно случайно это именно та часть, которая максимально чётко показывает бессмысленность любых рассуждений про "ptr vs mem ptr". Почему? Потому что ответов нет и не будет. Добавлено через 2 минуты Добавлено через 3 минуты Хотя, если ты пришёл из скриптухи, то возможно тебе на первых порах больше подойдёт std::variant[] = {}, а далее уже цикл по массиву и std::visit(или хотя бы std::get_if). Таким же образом работает вся скриптуха с динамической типизацией.
1
|
|||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 05.04.2024, 17:06 | ||
|
Сколько раз уже здесь втолковывали эти азы? 1. Два разных типа в С++ имеют совершенно разные представления, если требования стандарт языка не оговаривает иного. 2. Стандарт языка С++ оговаривает общие черты представления некоторых целых типов (к нашей теме не относится) 3. Стандарт языка С++ оговаривает общие черты представления указателей на layout-compatible типы. 4. Стандарт языка С++ оговаривает общие черты представления указателей char * и void *.Это всё. (Аналогичные гарантии есть в языке С) То есть за редким исключением, все указательные типы в С++ ничего общего друга с другом не имеют. Все они имеют совершенно разные размеры и совершенно разные внутренние представления.
2
|
||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|
| 05.04.2024, 18:48 [ТС] | |
|
ну вообще не совсем понятно
указатель - он указывает на адрес в памяти адресации в памяти очевидно подобна. операторы ++ -- и иные которые определены наверное где-то, они безусловно должны учитывать размер объекта, но если мы возъмем и сохраним где-то реальный размер объекта и будем хранить только начало его, то мы же сможем переписать оператор ++ или как -то сэмулировать его работу. т.е. зная начало и размер, мы же можем прочитать данные и интерпретировать их. чисто теоретически. а кстати как это можно сделать? т.е. например в одном массиве указатели на начала объектов, а в другом размеры объектов( условно положим что у каждого класса размеры разные) и обходя элементы первого массива в цикле анализируем размер по второму и например пребразовываем указатель к указателю на другой тип ? можно ли менять тип указателя или создавать новый другого типа, но указывающий на то же место в памяти что и указатель первого типа?
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 05.04.2024, 19:22 | |||
|
Применяя какую то одну из реализаций, ваш код будет работать только под определенный компилятор. Простыми словами, вы маетесь фигней. Даже Асемблер вам не буду советовать, там тоже нужно со всем считаться, а не писать код на догадках и своем, личном, восприятии.
1
|
|||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 05.04.2024, 22:02 [ТС] | ||
|
задача решена, и остальное уже просто так измышления. про стандарты с++ почитал. Возник вопрос: новые стандарты языка и использование новых возможностей оно увеличивает размер исполняемого файла, библиотеки по сравнению с реализацией аналогичного предыдущим стандартом?
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 05.04.2024, 22:27 | ||
|
Если будете писать код без понимания, то и разработка для вас будет сложна, и результат будет полон сюрпризов. Язык - это инструмент, как молоток, умеете им пользоваться - получается хорошо, не умеете - получается плохо. И не важно какого года выпуска этот молоток.
1
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 05.04.2024, 22:29 | ||
|
Всё зависит не от самого стандарта, а от используемых средств. Например использование STL + BOOST скажем в libtorrent. Там это серьезно сказывается на размере исполняемого файла, но и используются не пару феничек.
1
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||||||
| 05.04.2024, 22:59 | ||||||||||||
|
Используя такой указатель можно "просматривать" память, занимаемую объектом другого типа. Также с их использованием можно реализовать свою адресную арифметику. Например, итерироваться по массиву вы можете так:
Если же предположить, что у нас есть область памяти, где лежат объекты разных типов друг за другом, то да, вполне можно сделать некий "индекс", который будет правильно их оттуда извлекать, получив таким образом "как бы" массив из разных типов. Предстоит решить вопрос типизации при таком извлечении, учесть вопросы выравнивания и производительности в целом такого контейнера. Но задача не нерешаемая. В целом пока выглядит так, что полет вашей фантазии опережает ваши реальные знания, поэтому и ответы в этой теме в большинстве случаев вам не понятны. Как по мне, лучше не спешить, и подучиться, а потом вернуться к теме "интерпретации разных данных в памяти".
0
|
||||||||||||
| 05.04.2024, 22:59 | |
|
запрет шаблонов С++ использование шаблонов Реализация шаблонов Функции-шаблонов Специализация шаблонов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|