我如何 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>;
我正在尝试制作 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>;