我正在尝试将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
};
我编写每个基类的成员类型的原因是,在继承另一个类模板的类模板中,我不能直接使用成员类型,而是使用base::some_type
形式。
像allocator_type
这样的单一类型是可以的,但是当我尝试对成员模板使用using
语句时出现错误。
如何正确使用它?
答案 0 :(得分:3)
您的代码中有大约十个错误。指出不同。 (缺少分号只计为一个。)
#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>;
};
答案 1 :(得分:1)
您可以声明一个新的别名模板,该模板使用基础模板:
template <class U>
using rebind_alloc = typename base::rebind_alloc<U>;