Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
#1

Явное создание экземпляра класса и явная специализация шаблона класса - C++

09.05.2014, 13:48. Просмотров 1134. Ответов 3
Метки нет (Все метки)

Всем добрый день!
Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое? Растолкуйте, плз!
http://www.cyberforum.ru/cpp-beginners/thread1805221.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 13:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Явное создание экземпляра класса и явная специализация шаблона класса (C++):

Явная специализация класса
Код переписан из книги, однако не компилируется. Что не так со специализацией...

Явная специализация шаблонного класса
Всем привет, не могу разобраться с определением функций-членов для явной...

Создание экземпляра шаблона класса
Есть код: #include <iostream> #include <string> #include <vector> ...

Специализация шаблона класса
Имеется задание: Создать свой шаблонный класс – динамический массив...

Явная специализация шаблона
Столкнулся с проблемой при изучении шаблонов. Задача: написать шаблонную...

3
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,193
Завершенные тесты: 1
09.05.2014, 15:01 #2
Специализация шаблона используется тогда,
когда для каких-то конкретных типов переменных нужно создать код, отличный от шаблонного.
А создание экземпляра класса выполняется по предложенному шаблону.
0
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
10.05.2014, 10:55  [ТС] #3
zss, дело в том, что вот у меня в учебнике (С. Прата, "Язык программирования C++") написано:
"Для шаблонов классов, как и шаблонов функций, возможны неявные создания экземпляров, явные создания экземпляров и явные специализации, которые все вместе также называются специализациями. Шаблон описывает класс через обобщенный тип, а специализация - это объявление класса, сгенерированное для конкретного типа."

Да, то есть как Вы говорите, в таком случае для:
C++
1
2
template<typename T, typename V>
class Gcl { T val; V obj; };
неявным созданием экземпляра будет использование объявления:
C++
1
Gcl<char*, bool> tree;
явной специализацией определение:
C++
1
2
3
4
template <> class Gcl<std::string, bool>
{
//...
};
теперь объявление
C++
1
Gcl<std::string, bool> tree_n;
будет использовать класс сгенерированный этой специализацией.

Но что же такое явное создание экземпляра? В книге приведен пример:
C++
1
template class ArrayTP<string, 100>;
"В этом случае компилятор генерирует определение класса, включая определения методов, даже если не создаются или упоминаются объекты класса. ..."
Для чего эта вещь используется?
0
kzru_hunter
1106 / 775 / 99
Регистрация: 01.02.2011
Сообщений: 1,779
Записей в блоге: 1
25.02.2016, 19:36 #4
Цитата Сообщение от andrejap Посмотреть сообщение
Для чего эта вещь используется?
В этом случае компилятор генерирует определение класса, включая определения методов, даже если не создаются или упоминаются объекты класса
Вот как раз для этого. Эта строка заставляет компилятор всегда генерировать код определения шаблонного класса, включая все его методы.
Без этой строчки компилятор по частицам и по мере необходимости генерировал бы код для шаблонного класса: т.е. в случае, когда он встречает в коде создание объекта шаблонного класса, то только в этом случае генерирует код определения шаблонного класса, но не полностью (игнорируя его методы). И если затем в коде встречается вызов метода, то компилятор и для него отдельно генерирует определение.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2016, 19:36
Привет! Вот еще темы с решениями:

Явная специализация шаблона
Здравствуйте. Не совсем разобрася с сабжем. Например, если есть кусочек кода:...

Явная специализация шаблона
Здравствуйте, подскажите, пожалуйста, почему не выполняется неявное приведение...

Полная специализация шаблона класса
Всем плотный хайль, увидел вот такие слова: Я не понимаю смысл второго...

Явная специализация шаблона. Ошибки
Помогите исправить ошибки. Надо для шаблонного класса сделать специализацию...


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

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

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