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

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

Войти
Регистрация
Восстановить пароль
 
D.E.S.P.E.R.O.
9 / 9 / 0
Регистрация: 12.03.2009
Сообщений: 110
Завершенные тесты: 1
#1

Инстанцирование шаблона - C++

26.10.2012, 16:38. Просмотров 860. Ответов 8
Метки нет (Все метки)

Существует шаблон следующего вида:
C++
1
2
3
4
5
template<class T, int size>
void foo(T (&array)[size])
{
    cout << size << endl;
}
И следующий пример его использования:
C++
1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char *argv[])
{
    int a[] = {0, 1, 2};
    int *b  = new int[3];
    
    foo(a);
    foo(b);
 
    system("PAUSE");
    return 0;
}
Почему для массива а все происходит гладко, а для массива b компилятор выдает вот такую ошибку:
error C2784: 'void foo(T (&)[size])' : could not deduce template argument for 'T (&)[size]' from 'int *'
Я подозреваю, что динамическая память под массив будет выделена на этапе выполнения, а инстанцирование шаблона происходит на этапе компиляции. Но хотелось бы услышать более авторитетное мнение... Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2012, 16:38     Инстанцирование шаблона
Посмотрите здесь:

Инстанцирование шаблона - C++
Есть шаблонная очередь с использованием vector Как инстанцировать для своего класса, представляющего строку, изготовленную из...

Инстанцирование шаблона во время выполнения - C++
Добрый вечер! Компилятор требует константное выражение передаваемое в шаблон, как это можно обойти? мб с помощью каких то заклинаний над...

Инстанцирование шаблона для различных типов - C++
Помогите пожалуйста с программой... Нужно создать шаблон класса, для работы со структурой произвольного типа данных. В функции main()...

Инстанцирование шаблонного класса - C++
Уважаемые форумчане! Помогите в не сложном, как я полагаю, для Вас вопросе. Имеется шаблонный класс-контейнер оформленный в виде модуля...

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

Специализация шаблона - C++
Здравствуйте! Задача: Создайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое...

Параметры шаблона - C++
как в общем можно объяснить то что находиться в угловых скобках после template, я понимаю что template &lt;список параметров&gt;

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
26.10.2012, 16:43     Инстанцирование шаблона #2
На правах капитана: b вообще не массив, он указатель.
D.E.S.P.E.R.O.
9 / 9 / 0
Регистрация: 12.03.2009
Сообщений: 110
Завершенные тесты: 1
26.10.2012, 16:55  [ТС]     Инстанцирование шаблона #3
Но а при передаче в функцию вроде тоже должен трактоваться как указатель?
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.10.2012, 16:57     Инстанцирование шаблона #4
Цитата Сообщение от D.E.S.P.E.R.O. Посмотреть сообщение
Я подозреваю, что динамическая память под массив будет выделена на этапе выполнения, а инстанцирование шаблона происходит на этапе компиляции.
В яблочко.
D.E.S.P.E.R.O.
9 / 9 / 0
Регистрация: 12.03.2009
Сообщений: 110
Завершенные тесты: 1
26.10.2012, 17:06  [ТС]     Инстанцирование шаблона #5
То есть ругаеться компилятор, по сути, из-за size, которого еще не существует?
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.10.2012, 17:11     Инстанцирование шаблона #6
Цитата Сообщение от D.E.S.P.E.R.O. Посмотреть сообщение
То есть ругаеться компилятор, по сути, из-за size, которого еще не существует?
Грубо говоря, да. Компилятор не может определить размер массива, поскольку это вообще не массив.
D.E.S.P.E.R.O.
9 / 9 / 0
Регистрация: 12.03.2009
Сообщений: 110
Завершенные тесты: 1
26.10.2012, 17:14  [ТС]     Инстанцирование шаблона #7
Потому что санет массивом только после выделения памяти, то есть на этапе выполнения. soon, большое спасиба за разъяснение.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.10.2012, 17:18     Инстанцирование шаблона #8
D.E.S.P.E.R.O., даже тогда он не станет массивом. Он будет указывать на выделенный кусок памяти, размером size * sizeof(T).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 17:23     Инстанцирование шаблона
Еще ссылки по теме:

Параметры шаблона - C++
Доброго всем вечера. Вопрос по теории, который не выходит нагуглить. К примеру, нужно хранить статический массив интов с точно известным...

Наследование шаблона - C++
Есть два шаблона Array and NumericArray Хочется реализовать между ними иерархию типа NumericArray диревативынй класс а Array...

Создание шаблона - C++
Задача - сделать шаблон контейнера. То до чего додумался: #include &quot;stdafx.h&quot; #ifndef _TEMPL_H #define _TEMPL_H ...

Специализация шаблона - C++
Пытаюсь специализировать шаблон для типа float, но не получается. В чем проблема? Компилятор: 1&gt;TemplateArr.obj : error LNK2005:...

Ошибка шаблона - C++
Здравствуйте. Для шаблонного класса надо определить, что не использован тип void: template&lt;typename Type&gt; struct IsNoVoid { ...


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

Или воспользуйтесь поиском по форуму:
D.E.S.P.E.R.O.
9 / 9 / 0
Регистрация: 12.03.2009
Сообщений: 110
Завершенные тесты: 1
26.10.2012, 17:23  [ТС]     Инстанцирование шаблона #9
soon, еще раз большое спасибо. Теперь все предельно ясно!
Yandex
Объявления
26.10.2012, 17:23     Инстанцирование шаблона
Ответ Создать тему
Опции темы

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