738 / 342 / 71
Регистрация: 10.06.2014
Сообщений: 2,358
|
||||||
1 | ||||||
Вычисление размера массива на этапе компиляции20.03.2017, 16:20. Просмотров 2014. Ответов 11
Метки нет Все метки)
(
Нашел код который вычисляет размер массива на этапе компиляции
Но сам код мне не понятен. Объясните плз
То, что передается ссылка на массив это понятно. Не понятно следующее: 1. Здесь явно не задан тип шаблонного аргумента typename T и значения по умолчанию у него тоже нет. Как тогда это работает? 2. Каким образом шаблонного параметру std::size_t N присваивается размер массива? 3. Еще не понятно почему знак ссылки взят в скобки
0
|
|
20.03.2017, 16:20 | |
Как добавить анонимный тип в объект не на этапе компиляции, а на этапе выполнения программы? Надо для routes.MapRoute Typedef структуры массива с заполнением ячеек на этапе компиляции C++14: вычисления на этапе компиляции |
|
Don't worry, be happy
|
|
20.03.2017, 16:38 | 2 |
Тип выводится исходя из аргумента функции.
Исходя из аргумента функции. Потому что синтаксис такой. Это ссылка на массив. В данном случае без имени, потому как всё равно не используется.
1
|
738 / 342 / 71
Регистрация: 10.06.2014
Сообщений: 2,358
|
||||||
20.03.2017, 16:46 [ТС] | 3 | |||||
Тем не менее приходится явно указывать тип Или это относится только к функциям? Я просто не могу понять как это работает. Обычно когда пишем arr[N] это обращение к конкретному элементу массива А в этом случае каким то волшебным образом идет присваивание значения для N Именно логика присвоения не понятна. Тут же чтение и нет операций записи данных в N
0
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,176
|
|||||||||||
20.03.2017, 17:01 | 4 | ||||||||||
1. Компилятор видит, что создаётся экземпляр int arr[100]
2. Компилятор видит, что arr передаётся шаблонной функции arraySize. 3. Компилятор старается подобрать необходимый инстант шаблона функции, который смог бы принять передаваемый аргумент. Для этого ему нужно подобрать шаблонные параметры T и N. В конечном итоге он выводит инстант.
Добавлено через 3 минуты Я думаю, вам просто следует почитать о том, как работают шаблоны.
1
|
738 / 342 / 71
Регистрация: 10.06.2014
Сообщений: 2,358
|
|
20.03.2017, 17:01 [ТС] | 5 |
Это понятно, просто это уже не похоже на функцию, скорее на какую то магическую запись, которая вычисляет размер массива. Вот с точки зрения функции мне логика не понятна
0
|
491 / 205 / 69
Регистрация: 27.05.2016
Сообщений: 549
|
||||||
20.03.2017, 17:04 | 6 | |||||
Потому что это не функция.
Добавлено через 59 секунд
1
|
Don't worry, be happy
|
|||||||||||
20.03.2017, 17:05 | 7 | ||||||||||
![]() Решение
Дедукция доступна только для шаблонов функций.
Начиная с C++17 и для шаблонов классов, но здесь тоже свои заковырки будут. Причем здесь обращение к массиву?
int[100] .
1
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,176
|
|
20.03.2017, 17:08 | 8 |
sys_beginner А это и есть шаблонная магия... Сейчас мы используем шаблоны вовсе не для того, для чего они изначально создавались. Просто, в какой-то момент оказалось, что механизм автоматического вывода позволяет творить страшные, неестественные вещи... Фактически мы специальными магическими пасами загнали компилятор в условие, когда ему пришлось сгенерировать функцию, возвращающую число сто.
1
|
738 / 342 / 71
Регистрация: 10.06.2014
Сообщений: 2,358
|
|
20.03.2017, 17:16 [ТС] | 10 |
Большое всем спасибо!
Добавлено через 45 секунд То есть та же самая функция только самому писать не нужно ![]()
0
|
Don't worry, be happy
|
|
20.03.2017, 17:18 | 11 |
Она работает не только с массивами, но и с контейнерами или с чем-то у чего есть
sometype::size() .Просто для массивов имеется соответствующая специализация.
1
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,176
|
||||||
20.03.2017, 17:31 | 12 | |||||
1
|
20.03.2017, 17:31 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Ошибка на этапе компиляции Загрузка изображений на этапе компиляции Чтение файла на этапе компиляции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |