typedef от шаблонного класса

Тема в разделе "WASM.BEGINNERS", создана пользователем azamIN, 31 май 2009.

  1. azamIN

    azamIN New Member

    Публикаций:
    0
    Регистрация:
    10 май 2009
    Сообщения:
    4
    Здравствуйте.
    Объявил шаблон
    Код (Text):
    1. template  <class T,int size> class Barely
    .

    На его основе пытаюсь определить новый тип, выдается ошибка "type name expected"
    Код (Text):
    1. typedef Barely<T,int> *pBarely;  //Type name expected
    Что я сделал не так?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Шаблон не тип. Нужно конкретизировать шаблон, то бишь получить тип.
    typedef Barely<int,0> *pBarely;
     
  3. azamIN

    azamIN New Member

    Публикаций:
    0
    Регистрация:
    10 май 2009
    Сообщения:
    4
    Спасибо.
    А вот если класс Barely имеет конструктор с параметром, и в тексте я создаю указатель на класс Barely
    Код (Text):
    1. template <class T> void Barely<T>::Barely(int size) //конструктор с параметром
    2. ...
    3. ...
    4. Barely<int>* cur;        //указатель
    5. cur=new Barely<int>;
    Каким образом можно передать параметр созданному объекту? Barely<int> BarInst(3) - то же самое, только для указателя
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Так:
    Код (Text):
    1. Barely<int>* cur;        //указатель
    2. cur=new Barely<int>(3);
    Конструктор вызывается при создании объекта, а не при объявлении указателя.
     
  5. azamIN

    azamIN New Member

    Публикаций:
    0
    Регистрация:
    10 май 2009
    Сообщения:
    4
    thanks,man.
     
  6. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    То что подсказал booster это typedef который разворачивает шаблон в конкретные типы. Это работает.

    То что написал ты нуждается в аргументе к typedef (что-то типа typdef<T> template ...) и это в C++98 не работает. Стандартная конcтрукция решающая проблему выглядит так:

    Код (Text):
    1. tempalte <class T>
    2. class Something
    3. {
    4.    typedef xxxxx;
    5. };