2012-09-18 58 views
1

可能重复:
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++ primer中看到过。

在此先感谢。

+2

这是因为'malloc'是一个独立的名字。尽管如此,没有任何关于C++ 11的具体内容。 – Flexo

+0

“这是什么巫术” - 大声笑 – sehe

回答

0

听起来像是你要通过显示在该行的中间了“模板”关键字揭去,特别是呼叫

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

的一点是,你要做到这一点:

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

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

这更详细地解释了Flexo在原始问题的评论中发布的链接。