我有以下(抽象!!!)结构:
- 模板类,有两个参数。第一个参数是存储数据的类型,第二个是分配器,有一个默认值。此外,该类有一个将分配器作为参数的方法。 (容器)
- 下一个类是分配器的包装器;它存储定义分配器别名的嵌套结构。(分配器)
- 最后一个类是分配器本身的类。(_alloc)
编码:
template <class T>
class _alloc
{
};
struct allocator
{
template<class T>
struct helper_allocator
{
typedef _alloc<T> hlp_allocator;
};
};
template <class T, class all = allocator>
class container
{
public:
void replace_allocator(const all::helper_allocator<T>::hlp_allocator& a)
{
}
};
int main()
{
allocator::helper_allocator<int>::hlp_allocator a;
container<int, allocator> t;
t.replace_allocator(a);
return 0;
}
编译时,类syntax error: identifier 'helper_allocator'
方法中出现错误。解释我在哪里误解?如果直接使用分配器类型而不是模板参数all,那么编译成功。replace_allocator
container
PS:使用不适用,因为 C++11 不可用。
该结构
helper_allocator
仅为allocator
. 对于任何其他实体,它不存在,因此对于某些类型all
,它也不存在,因为all
只有默认情况下它是allocator
,但它可以是另一种类型。如果可以,则语法不正确。另一方面,如果您定义all
为类型 aliasallocator
,那么编译器将知道这是定义您要查找的类型的唯一类型:using all = allocator;
或者,依赖名称helper_allocator<t>
只需要通过allocator
你只需要
typename
放:最好不要使用以全局范围开头的标识符
_
,因为它们被认为是保留的。