可能重复:我必须在何处以及为何要使用“模板”和“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 回答
听起来你会被在行中间出现的“template”关键字,特别是调用所引发
关键是你想要这样做:
...但是解析器不知道alloc_t的malloc成员应该是模板,所以它会出错 . 添加模板关键字可以提供足够的信息来继续 .
Flexo在原始问题的评论中发布的链接中对此进行了更广泛的解释 .