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

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

Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

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

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

Всем добрый день!
Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое? Растолкуйте, плз!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 13:48     Явное создание экземпляра класса и явная специализация шаблона класса
Посмотрите здесь:

C++ Явная специализация класса
C++ Специализация шаблона класса
Явная специализация шаблона C++
Явная специализация шаблона. Ошибки C++
Явная специализация шаблона C++
C++ Явная специализация шаблонного класса
C++ Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
C++ Создание экземпляра класса до определения класса
C++ Явная специализация шаблона функции - ошибка на этапе компиляции
Явная специализация шаблона C++
Создание экземпляра шаблона класса C++
Явная специализация шаблона класса и ее методы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6190 / 5793 / 1875
Регистрация: 18.12.2011
Сообщений: 14,799
Завершенные тесты: 1
09.05.2014, 15:01     Явное создание экземпляра класса и явная специализация шаблона класса #2
Специализация шаблона используется тогда,
когда для каких-то конкретных типов переменных нужно создать код, отличный от шаблонного.
А создание экземпляра класса выполняется по предложенному шаблону.
andrejap
13 / 13 / 1
Регистрация: 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>;
"В этом случае компилятор генерирует определение класса, включая определения методов, даже если не создаются или упоминаются объекты класса. ..."
Для чего эта вещь используется?
kzru_hunter
1084 / 759 / 58
Регистрация: 01.02.2011
Сообщений: 1,774
Записей в блоге: 1
25.02.2016, 19:36     Явное создание экземпляра класса и явная специализация шаблона класса #4
Цитата Сообщение от andrejap Посмотреть сообщение
Для чего эта вещь используется?
В этом случае компилятор генерирует определение класса, включая определения методов, даже если не создаются или упоминаются объекты класса
Вот как раз для этого. Эта строка заставляет компилятор всегда генерировать код определения шаблонного класса, включая все его методы.
Без этой строчки компилятор по частицам и по мере необходимости генерировал бы код для шаблонного класса: т.е. в случае, когда он встречает в коде создание объекта шаблонного класса, то только в этом случае генерирует код определения шаблонного класса, но не полностью (игнорируя его методы). И если затем в коде встречается вызов метода, то компилятор и для него отдельно генерирует определение.
Yandex
Объявления
25.02.2016, 19:36     Явное создание экземпляра класса и явная специализация шаблона класса
Ответ Создать тему
Опции темы

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