这是什么样的模板?

时间:2012-09-18 13:11:21

标签: c++ templates

  

可能重复:
  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 ++入门中看到它。

提前致谢。

1 个答案:

答案 0 :(得分:0)

听起来你会被在行中间出现的“template”关键字所抛弃,特别是调用

alloc->template malloc<Protocol_v2<alloc_t> >();

重点是你想要这样做:

alloc->malloc<Protocol_v2<alloc_t> >();

...但是解析器不知道alloc_t的malloc成员应该是一个模板,所以它会出错。添加模板关键字可以提供足够的信息来继续。

Flexo在原始问题的评论中发布的链接中对此进行了更广泛的解释。