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

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

Восстановить пароль Регистрация
 
zasadadada
2 / 2 / 0
Регистрация: 03.05.2013
Сообщений: 338
20.09.2016, 11:23     Передача массива в шаблон #1
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";
Так не работает. Почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,223
20.09.2016, 11:34     Передача массива в шаблон #2
Цитата Сообщение от zasadadada Посмотреть сообщение
Так не работает. Почему?
ну вы же передаете туда указатель const char *, а не массив. Вы так сказать приведением массива к указателю на его первый элемент срезали информацию о его размере.
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 11:40     Передача массива в шаблон #3
Ничего не упускается. Там всего один параметр.
zasadadada
2 / 2 / 0
Регистрация: 03.05.2013
Сообщений: 338
20.09.2016, 11:44  [ТС]     Передача массива в шаблон #4
std::size_t N автоматический получает?
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 11:55     Передача массива в шаблон #5
Размер выводится из параметра.
zasadadada
2 / 2 / 0
Регистрация: 03.05.2013
Сообщений: 338
20.09.2016, 12:10  [ТС]     Передача массива в шаблон #6
Прошу прощения, но раньше что бы определить размер массива надо было использовать sizeof. А сейчас какая то магия. В шаблоне ни чего нет, а размер выводит... Что то упустил.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,832
Записей в блоге: 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++

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

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

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