我忘记了这一刻的语法。有人可以帮忙吗?基本上下面是我想要做的。如果需要,我不介意将其设置为采用两个模板参数,如果这更容易,则表示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> >();
}
答案 0 :(得分: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
}
答案 1 :(得分:2)
template<class> class SchedT
函数参数中的template
?替换为class SchedT
。
早期的语法是传递template
,后者是template
生成的类。