我无法解析以下代码行的含义:
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;
答案 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>
关键字typename
和template
后面有空格,可能会让您感到困惑。由于使用了这两个关键字,请参阅Where and why do I have to put the "template" and "typename" keywords?。