Встретил в книге Герба Саттера "Решение сложных задач на C++" следующий интересный тест на знание шаблонов C++:
1. Что такое специализация шаблона? Приведите пример.
2. Что такое частичная специализация шаблона? Приведите пример.
3. Рассмотрим следующие объявления:
// 1
template<typename T1, typename T2>
void g(T1, T2);
// 2
template<typename T>
void g(T);
// 3
template<typename T>
g(T, T);
// 4
template<typename T>
g(T*);
// 5
template<typename T>
g(T*, T);
// 6
template<typename T>
g(T, T*);
// 7
template<typename T>
g(int, T*);
// 8
template<>
void g<int>(int);
// 9
void g(int, double);
// 10
void g(int);
Какие из этих функций будут вызваны в каждой из следующих инструкций?
Где это возможно, укажите типы параметров шаблонов:
Где это возможно, укажите типы параметров шаблонов:
int i;
double d;
float f;
complex c;
// a
g( i );
// b
g<int>( i );
// c
g( i, i );
// d
g( c );
// e
g( i, f );
// f
g( i, d );
// g
g( c, &c );
// h
g( i, &d );
// i
g( &d, d );
// j
g( &d );
// k
g( d, &i );
// l
g( &i, &i );
Очевидно, задача на понимание и знание правил разрешения перегрузок, а также приоритетов перегрузок и специализаций. Но решение не так очевидно. Развлекайтейсь :)
(ответы смотрите сами в Саттере (задача 1.17), либо могу по просьбе прислать в личку)
(ответы смотрите сами в Саттере (задача 1.17), либо могу по просьбе прислать в личку)
Я дал следующие ответы:
ОтветитьУдалитьa - 10
b - 8
c - 3
d - 2
e - 1
f - 9
g - 6
h - 7
i - 5
j - 4
k - 1
l - 1
Вот мои ответы:
ОтветитьУдалитьa. 10
b. 8
c. 3
d. 2
e. 1
f. 9
g. 6
h. 7
i. 5
j. 4
k. 1
l. 3
Полностью согласен с ответами Алексея. Юлик, что там Саттер думает по поводу последнего вопроса? :-)
ОтветитьУдалитьДада... Я прокидался на последнем :)
ОтветитьУдалить