2014-06-16 3 views
1

Я забываю синтаксис в этот момент. Кто-то может помочь? В основном ниже - это то, что я пытаюсь сделать. Я не возражаю, чтобы установить его для принятия двух аргументов шаблона, если это необходимо, значение runSchedule<SchedT, TaskT>(), если это проще. Также, если вы могли бы прокомментировать, как получить псевдоним использования для работы scheduler_type и scheduler_type::task_type, которые будут распознаваться как типы внутри функции.Передача класса шаблона функции шаблона

#include <iostream>                                                     

class TestTask {                                                     
public:                                                        
    int x;                                                       
};                                                         

template <typename TaskT>                                                   
class TestScheduler {                                                    
public:                                                        
    typedef TaskT task_type;                                                  
    int y;                                                       
};                                                         

template <template<class> class SchedT>                                                
void runSchedule() {                                                    
    typedef SchedT scheduler_type;                                                 
    scheduler_type sched;                                                   
    scheduler_type::task_type task;                                                 
}                                                         

int main() {                                                       
    runSchedule<TestScheduler<TestTask> >();                                               
}  

ответ

4

Вам не нужен шаблон-шаблон шаблона для того, что вы пытаетесь сделать.

template < class SchedT> 
void runSchedule() { 
    typedef SchedT scheduler_type; // <-- typedef syntax was backwards 
    scheduler_type sched; 
    typename scheduler_type::task_type task; 
    // ^^^^^ need typename keyword when referring to nested dependent type 
} 
+0

спасибо, я исправил typedef, я быстро набрал его. Это именно то, что я хотел, я не думал, что мне нужен шаблон шаблона в этом случае. Я думаю, что большой думаю, что я отсутствовал, это префикс typename. Я соглашусь, что однажды истекает срок для ответов – bjackfly

2

template<class> class SchedT в вашей template функции argumets?

Заменить на class SchedT.

Более ранний синтаксис предназначен для передачи template, а затем класса, сгенерированного template.

Смежные вопросы