可能重复:
Where and why do I have to put the “template” and “typename” keywords?
这是片段代码:
template <typename alloc_t>
int Protocol_v2<alloc_t>::create(..., alloc_t *alloc, ...) {
Protocol_v2<alloc_t> * pack = alloc->template malloc<Protocol_v2<alloc_t> >();
Protocol_v2是一个模板类,如下所示:
template <typename alloc_t>
class Protocol_v2 { ...}
alloc_t是一个类,如下所示:
class reverse_allocator {
...
template<typename T>
inline T * malloc() {}
...
}
困扰我的是这一行:
Protocol_v2<alloc_t> * pack = alloc->template malloc<Protocol_v2<alloc_t> >();
这是什么意思?到目前为止,我还没有在c ++入门中看到它。
提前致谢。
答案 0 :(得分:0)
听起来你会被在行中间出现的“template”关键字所抛弃,特别是调用
alloc->template malloc<Protocol_v2<alloc_t> >();
重点是你想要这样做:
alloc->malloc<Protocol_v2<alloc_t> >();
...但是解析器不知道alloc_t的malloc成员应该是一个模板,所以它会出错。添加模板关键字可以提供足够的信息来继续。
Flexo在原始问题的评论中发布的链接中对此进行了更广泛的解释。