Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 16:48   #1
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию Шаблоны. переопределение распределителя

Хочу переопределить распределитель в шаблонах. Нашел пример. Хочу вынести реализацию инициализации объектов класса за пределы объявления класса. Делаю так:

Код:
template <class T>
class spec_allocator
{
public:
   typedef T                value_type;
   typedef value_type*        pointer;
   typedef const T*            const_pointer;
   typedef T&                reference;
   typedef const T&            const_reference;
   typedef std::size_t        size_type;
   typedef std::ptrdiff_t    difference_type;

   template <typename Other>
   struct rebind
   { typedef spec_allocator<Other> other; };

   spec_allocator() {}
   template <typename Other> spec_allocator(const spec_allocator<Other>&) {}
   spec_allocator(const spec_allocator&) {}
   template <typename Other> spec_allocator& operator=(const spec_allocator<Other>&) { return *this; }
   ~spec_allocator() {}
   pointer address(reference x) { return &x; }
   const_pointer address(const_reference x) const { return &x; }
   pointer allocate(size_type n, const void* = 0); //выношу этот метод.
 
   void deallocate(pointer p, size_type n)
   {
 //      assert((p == 0) == (n == 0));
 //      ::operator delete((void*)p);
   }
   size_type max_size() const { return 100;}//size_t(-1) / sizeof(value_type); }
   void construct(pointer p, const T& val) const { allocator_construct(p, val); }
   void destroy(pointer p) const { allocator_destroy(p); }
};
И реализовываю так:

Код:
template <class T>
spec_allocator<T>::pointer spec_allocator<T>::allocate(spec_allocator<T>::size_type n, const void * = 0)
{
	return (n != 0) ? reinterpret_cast<pointer>(::operator new(n * sizeof(value_type))) : 0; 
}
На что кампилятор ругается так:

Код:
 error C2143: syntax error : missing ';' before 'spec_allocator<T>::allocate'
  error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
fatal error C1903: unable to recover from previous error(s);
Если реализацию занести в класс, все работает. Ошибка во второй части. В чем?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переопределение оператора умножения EmperorXXX Общие вопросы Delphi 1 16.10.2009 00:16
Наследование и переопределение. Lunex.08 Общие вопросы C/C++ 3 29.09.2009 09:23
Переопределение Update в DBGrid Minotavr_x86 БД в Delphi 6 18.04.2009 13:10
Переопределение реакции на события ByWatt Общие вопросы Delphi 1 20.12.2007 17:22
Переопределение операций toeman Общие вопросы C/C++ 2 20.11.2007 11:21