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

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

Войти
Регистрация
Восстановить пароль
 
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
#1

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

20.09.2016, 11:23. Просмотров 295. Ответов 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";
Так не работает. Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2016, 11:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача массива в шаблон (C++):

Шаблон класса, передача аргументов - C++
Есть шаблон класса, аргументы для создания класса константные itk::Vector &lt;float,ch &gt; шаблон писал не я, это готовый шаблон из...

Передача в шаблон класса с перегруженными операторами - C++
У меня есть класс TProc: template&lt;class Type&gt; class TProc { private: Type Lop_Res; Type Rop; string operation; public: ...

Передача массива структур в функцию не указывая размера массива - C++
Я читаю с командной строки файл в котором содержится массив структур. Есть библиотека с функцией в которую я прередаю файл и массив...

Шаблон динамического массива - C++
//================================================================================================= template &lt;class BaseType&gt; class...

Шаблон класса одномерного массива - C++
Упорядочьте одномерный массив по возрастанию и убыванию методом обмена. Суть такова, нужно создать шаблон класса с динамическим...

Шаблон функции сортировки массива - C++
сортирования элементов в массиве. как это сделать без шаблонов знаю, а вот как создать шаблон? подскажите пожалуйста.заранее...

7
rikimaru2013
C++ Game Dev
2438 / 1132 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
20.09.2016, 11:34 #2
Цитата Сообщение от zasadadada Посмотреть сообщение
Так не работает. Почему?
ну вы же передаете туда указатель const char *, а не массив. Вы так сказать приведением массива к указателю на его первый элемент срезали информацию о его размере.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 11:40 #3
Ничего не упускается. Там всего один параметр.
0
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
20.09.2016, 11:44  [ТС] #4
std::size_t N автоматический получает?
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.09.2016, 11:55 #5
Размер выводится из параметра.
0
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
20.09.2016, 12:10  [ТС] #6
Прошу прощения, но раньше что бы определить размер массива надо было использовать sizeof. А сейчас какая то магия. В шаблоне ни чего нет, а размер выводит... Что то упустил.
0
Croessmah
Эксперт CЭксперт С++
13508 / 7666 / 866
Регистрация: 27.09.2012
Сообщений: 18,858
Записей в блоге: 3
Завершенные тесты: 1
20.09.2016, 12:12 #7
Цитата Сообщение от zasadadada Посмотреть сообщение
В шаблоне ни чего нет,
там есть ссылка на массив:
C++
1
T (&) [N]
что нужно поставить вместо N в эту запись, чтобы вызов
C++
1
arraySize(name)
был валидным?
Правильно - размер массива name.
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,117
Записей в блоге: 5
Завершенные тесты: 1
20.09.2016, 12:34 #8
Цитата Сообщение от zasadadada Посмотреть сообщение
Так не работает. Почему?
Нельзя скастовать указатель в ссылку на массив.
0
20.09.2016, 12:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2016, 12:34
Привет! Вот еще темы с ответами:

Шаблон задаваемого с клавиатуры динамического массива - C++
Обязательно с использованием классов Есть задача. Дан массив вещественных чисел. а) Ко всем отрицательным элементам прибавить элемент...

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

Реализовать шаблон сортировки массива методом слияния - C++
Реализовать шаблон сортировки массива методом слияния.

Класс-шаблон ассоциативного массива с использованием вектора - C++
Задание выглядит так: &quot;Создать шаблонный класс – ассоциативный массив mymap с использованием STL контейнера vector. Ключ и знание должны...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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