1

可能重复:
我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?

这是片段代码:

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++ 入门中看到这一点。

提前致谢。

4

1 回答 1

1

听起来你被显示在行中间的“模板”关键字吓跑了,特别是调用

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

关键是你想这样做:

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

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

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

于 2012-09-18T13:37:46.923 回答