C ++ typedef typename classname :: template

时间:2016-10-14 05:05:54

标签: c++ templates

我无法解析以下代码行的含义:

typedef typename Allocator::template rebind<Mapped>::other mapped_type_allocator;

这是分配器重新绑定的代码(第63行) https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.5/a00756_source.html

这与以下有何不同?

typedef typename Allocator::rebind<Mapped>::other mapped_type_allocator;

2 个答案:

答案 0 :(得分:6)

typedef typename Allocator::template rebind<Mapped>::other mapped_type_allocator;

这是templated typedef - 它将mapped_type_allocator设置为模板的别名。

typedef typename Allocator::rebind<Mapped>::other mapped_type_allocator;

这是类型的typedef。要编译好,需要定义/知道Mapped

Allocator::rebind<typename X>::other(作为一个概念)应该定义模板,而不是类型。

答案 1 :(得分:3)

这里我将在不同的行中显示此声明的分组:

typedef                                                    mapped_type_allocator;
        typename Allocator::                       ::other 
                            template rebind<Mapped>

关键字typenametemplate后面有空格,可能会让您感到困惑。由于使用了这两个关键字,请参阅Where and why do I have to put the "template" and "typename" keywords?