我如何 typedef base class 的成员模板?

How do I typedef base class's member template?

我正在尝试制作 rebind_alloc 的缩写形式作为成员模板。

我的代码的最小部分如下:

template <class T, class Allocator = std::allocator<T> >
struct A
{
  using allocator_type = Allocator;

  template <class U>
  using rebind_alloc = typename std::allocator_traits<Allocator>::template rebind_alloc<U>;
};

template <class T, class Allocator = std::allocator<T> >
struct B : A<T, Allocator>
{
  using base = A<T>;
  using typename base::allocator_type;

  B(const allocator_type& alloc);
  // B(const base::allocator_type& alloc);

  template <class U>
  using typename base::rebind_alloc<U>; // ERROR ON THIS LINE
};

我之所以写每个基础class的成员类型是因为在继承另一个class模板的class模板中我不能直接使用成员类型而是使用base::some_type表格.

allocator_type这样的单一类型是可以的,但是当我尝试对成员模板使用using语句时出现错误。

如何正确使用它?

您的代码中大约有十个错误。指出不同。 (缺少分号只算一个。)

#include <memory>

template <class T, class Allocator = std::allocator<T> >
struct A
{
  using allocator_type = Allocator;

  template <class U>
  using rebind_alloc =
      typename std::allocator_traits<Allocator>::template rebind_alloc<U>;
};

template <class T, class Allocator = std::allocator<T> >
struct B : A<T, Allocator>
{
  using base = A<T, Allocator>;
  using allocator_type = typename base::allocator_type;

  B(const allocator_type& alloc);

  template <class U>
  using rebind_alloc = typename base::template rebind_alloc<U>;
};

您可以声明一个新的别名模板,它使用基础模板:

template <class U>
  using rebind_alloc = typename base::rebind_alloc<U>;