Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zasadadada
2 / 2 / 0
Регистрация: 03.05.2013
Сообщений: 375
#1

Передача массива в шаблон - C++

20.09.2016, 11:23. Просмотров 202. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Example program
#include <iostream>
#include <string>
 
template<typename T, std::size_t N>
constexpr std::size_t arraySize (T (&) [N] ) noexcept {
    return N;
}
 
int main()
{
    const char name [] = "Briggs" ; // Тип name - const char [ lЗJ
    const char * ptrToName = name; // Массив становится указателем 
    
    std::cout << arraySize(name) << "\n";
    //std::cout << arraySize(ptrToName) << "\n";
}
Уважаемые, не могу разобраться, читаю книгу.
C++
1
std::cout << arraySize(name) << "\n";
Вот так работает, но почему параметр 2 упускается?
C++
1
std::cout << arraySize(ptrToName) << "\n";
Так не работает. Почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2016, 11:23     Передача массива в шаблон
Посмотрите здесь:

C++ Шаблон задаваемого с клавиатуры динамического массива
C++ Шаблон динамического массива
Передача массива структур в функцию не указывая размера массива C++
Как создать шаблон класса одномерного динамического массива? C++
Реализовать шаблон сортировки массива методом слияния C++
C++ Сумма элементов массива до максимального. Создать шаблон функции
Шаблон функции: найти сумму элементов массива, кратных 3 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2302 / 1018 / 232
Регистрация: 30.11.2013
Сообщений: 3,374
20.09.2016, 11:34     Передача массива в шаблон #2
Цитата Сообщение от zasadadada Посмотреть сообщение
Так не работает. Почему?
ну вы же передаете туда указатель const char *, а не массив. Вы так сказать приведением массива к указателю на его первый элемент срезали информацию о его размере.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 11:40     Передача массива в шаблон #3
Ничего не упускается. Там всего один параметр.
zasadadada
2 / 2 / 0
Регистрация: 03.05.2013
Сообщений: 375
20.09.2016, 11:44  [ТС]     Передача массива в шаблон #4
std::size_t N автоматический получает?
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 11:55     Передача массива в шаблон #5
Размер выводится из параметра.
zasadadada
2 / 2 / 0
Регистрация: 03.05.2013
Сообщений: 375
20.09.2016, 12:10  [ТС]     Передача массива в шаблон #6
Прошу прощения, но раньше что бы определить размер массива надо было использовать sizeof. А сейчас какая то магия. В шаблоне ни чего нет, а размер выводит... Что то упустил.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12500 / 7062 / 793
Регистрация: 27.09.2012
Сообщений: 17,447
Записей в блоге: 2
Завершенные тесты: 1
20.09.2016, 12:12     Передача массива в шаблон #7
Цитата Сообщение от zasadadada Посмотреть сообщение
В шаблоне ни чего нет,
там есть ссылка на массив:
C++
1
T (&) [N]
что нужно поставить вместо N в эту запись, чтобы вызов
C++
1
arraySize(name)
был валидным?
Правильно - размер массива name.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2016, 12:34     Передача массива в шаблон
Еще ссылки по теме:

Шаблон функции вычисляющий количество элементов массива в заданном диапазоне C++
C++ Класс-шаблон ассоциативного массива с использованием вектора
C++ Шаблон класса, передача аргументов
C++ Передача в шаблон класса с перегруженными операторами
Шаблон функции с возвращением положительных элементов массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1780 / 1155 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
20.09.2016, 12:34     Передача массива в шаблон #8
Цитата Сообщение от zasadadada Посмотреть сообщение
Так не работает. Почему?
Нельзя скастовать указатель в ссылку на массив.
Yandex
Объявления
20.09.2016, 12:34     Передача массива в шаблон
Ответ Создать тему
Опции темы

Текущее время: 15:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru