@acra

C++ шаблон в шаблоне как?

Есть очередь:
template<typename T>
class QueueList {
  public:
    QueueList ();

    void push (const T i);

    T pop ();

private:

    typedef struct node {
      T item;      
      node * next;
    } node;

    typedef node * link; 

    int size;        
    link head;      
    link tail;       
};

template<typename T>
QueueList<T>::QueueList () {
  size = 0;       
  head = NULL;    
  tail = NULL;   
}

template<typename T>
void QueueList<T>::push (const T i) {
 
  link t = tail;
 
  tail = (link) new node;
 
  tail->next = NULL;
 
  tail->item = i;
 
  if (isEmpty ())
 
    head = tail;
 
  else
 
    t->next = tail;
 
  size++;
}


В нее помещаю структуру:
struct listStruct{
      
    unsigned long limit;
    void (*func)(char *);    
  };


Создаю очередь:
QueueList <listStruct> list;

И все работает но!
Как добавить структуру вида:

template<typename T>
struct listStruct{
      
    unsigned long limit; 
    
    void (*func)(T);
  };

Буду благодарен за любую помощь в решении данной проблемы.

На конструкцию вида: templatetypename T> class C {...} ругается...
  • Вопрос задан
  • 3129 просмотров
Пригласить эксперта
Ответы на вопрос 3
Nipheris
@Nipheris Куратор тега C++
Если тип T в конструкции void (*func)(T) должен быть таким же, что и в объемлющем классе, то тогда template перед listStruct нужно вообще убрать. Если тип должен быть другой (как можно предположить из темы вопросы), то воспользуйтесь другим идентификатором типа, например template struct listStruct {...}. По идее, все это должно быть написано в сообщении от компилятора.
Ответ написан
Комментировать
@DISaccount
Пишите частичную специализацию шаблона QueueList.
template<template <typename> class C, typename T>
class QueueList< C<T> > {};
Ответ написан
@Koss1024
QueueList<listStruct<int> > queue;

не забудьте пробельчик перед последним '>'
(в С++ 11 пофиг)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы