Общество любителей CСтатьи

Ответы на некоторые вопросы по С++ (6 стр)

Автор:

178. Для чего предназначены шаблоны?
Изначально - для того чтобы не писать одинаковый код для разных типов.
Потом появилось еще и метарограммирование с использованием шаблонов.

179. Какие виды шаблонов в С++ вы знаете?
Шаблоны классов и шаблоны функций.

180. Объясните термин «инстанцирование шаблона».
Подстановка реальных типов в качестве аргументов шаблона.

181. В чем разница между определением и объявлением шаблона?
template < class T > struct TA; // declaration
template < class T > struct TA { T a; }; // definiftion

182. Объясните назначение ключевого слова typename.
В списке параметров шаблона может использоваться как синоним "class"
Внутри шаблона используется для указания компилятору вложенного типа типа зависящего от параметра шаблона:
template < class T > struct TA { typedef typename T::iterator type; }; // без typename - ошибка компиляции

183. Какие виды параметров разрешается задавать в шаблоне класса? А в шаблоне функции?
...

184. Можно ли параметрам шаблона присваивать значения по умолчанию?
Да.

185. Может ли параметром шаблона быть другой шаблон? Каковы особенности объявления параметра-шаблона?
Да: template < template <class> class TT > TA { TT<int> m; };

186. Что такое специализация шаблона? Объясните разницу между полной и частичной специализацией.
Это частный случай некоторого шаблона при фиксированной части аргументов. Полная специализация - все аргументы фиксированы.
Пример:
template < class T, class U > struct TA {}; // Primary template
template < class T > struct TA<T, int> {}; // Partial specialization
template <> struct TA<int, int> {}; // Explicit specialization

187. Разрешается ли специализировать шаблон функции?
Разрешается только полная специализация, т.к. частичная - суть перегрузка.

188. Может ли класс-шаблон быть вложенным в другой класс-шаблон? А в обычный класс?
Да. Да.

189. Можно ли объявить в классе шаблонный метод? А шаблонный конструктор?
Да. Да.

190. Можно ли перегружать функцию-шаблон?
Да.

191. Какие параметры функции-шаблона выводятся автоматически?
Не dependent types.

192. Может ли шаблон класса быть наследником обычного класса? А обычный класс от шаблона?
Да. ???.

193. Объясните, что такое класс свойств (класс трактовок).
traits - вспомогательный шаблонный класс который содержит вложенные типы и статические функции соответсвующие данному типу (предназначенные для работы с ним).

194. Каким образом можно использовать возможность наследования обычного класса от шаблона?
???

195. Может ли шаблонный конструктор быть конструктором по умолчанию?
Нет.

196. Для чего применяются директивы явного инстанцирования?
Дл того чтобы соответствующая инстанциация была скомпилирована/слинкована.

197. Объясните, в чем состоят проблемы, возникающие при разделении шаблонного класса на интерфейс и реализацию?
Реализация не может быть вынесена в .cpp файл. (т.к. экспорт шаблонов не поддерживается большей частью компиляторов)

198. Что такое «модель явного инстанцирования» и как она работает?
Реализация вынесена в .cpp файл и есть явно инстанциация для нужных типов.

199. Может ли шаблонный класс иметь «друзей»?
Да.

200. Какие проблемы возникают при объявлении дружественной функции для класса-шаблона?

201. Разрешается ли определять в классе-шаблоне статические поля? А статические методы?
Да. Да.

202. Что такое «инициализация нулем»?
(zero-initialization) объект инициализируется значением 0 (преобразованное в тип объекта).
Инициализация по умолчанию POD типов производит инициализацию нулями.
Для стсатических переменных встроенных типов производиться инициализация нулямию

Страницы: 1 2 3 4 5 6

28 июля 2006 (Обновление: 13 янв 2009)

Комментарии [11]