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




Разрешение имен в определениях шаблонов * - часть 6


Упражнение 10.13

Назовите два шага разрешения имени в определениях шаблона. Объясните, каким образом первый шаг отвечает потребностям разработчика библиотеки, а второй обеспечивает гибкость, необходимую пользователям шаблонов.

Упражнение 10.14

На какие объявления ссылаются имена display и SIZE в реализации max(LongDouble*,SIZE)?

// ---- exercise.h ----

void display( const void* );

typedef unsigned int SIZE;

template <typename Type>

   Type max( Type* array, SIZE size )

{

   Type max_val = array[0];

   for ( SIZE i = 1; i < size; ++i )

      if ( array[i] > max_val )

         max_val = array[i];

   display( "Maximum value found: " );

   display( max_val );

   return max_val;

}

// ---- user.h ----

class LongDouble { /* ... */ };

void display( const LongDouble & );

void display( const char * );

typedef int SIZE;

// ---- user.C ----

#include <exercize.h>

#include "user.h"

LongDouble ad[7];

int main() {

   // задать значения элементов массива ad

   // конкретизируется max( LongDouble*, SIZE )

   SIZE size = sizeof(ad) / sizeof(LongDouble);

   max( &ad[0], size );

}




Содержание  Назад  Вперед