首页 文章

这是什么样的模板? [重复]

提问于
浏览
1

可能重复:我必须在何处以及为何要使用“模板”和“typename”关键字?

这是片段代码:

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

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

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

    关键是你想要这样做:

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

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

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

相关问题