为了方便起见,我正在设计Array类,并希望按特定顺序具有许多可选组件。这是我想要的标题设置:
class Allocator {};
Allocator DefaultAlloc;
class ArrayIterator {};
template<typename Key, typename Value, typename Iterator, Allocator& alloc = DefaultAlloc>
class Array {};
template<typename Key, typename Value, Allocator& alloc = DefaultAlloc>
class Array : public Array<Key, Value, ArrayIterator, alloc> {};
template<typename Value, Allocator& alloc = DefaultAlloc>
class Array : public Array<std::size_t, Valve, alloc> {};
此代码将不起作用,但是有没有办法为类创建使用相同的输出语法?我不能使用类型的参数包,因为我的上一个模板arg是非类型名。可以使用模板来实现此目的吗?还是每个专业都必须使用唯一的名称?
答案 0 :(得分:0)
#include <iostream>
class Allocator {};
Allocator DefaultAlloc;
class ArrayIterator {};
template<
typename Value,
typename Key = std::size_t,
typename Iterator = ArrayIterator,
Allocator& alloc = DefaultAlloc>
class Array {};
class ArrayIterator2 {};
Array<int> v;
Array<long, int> v2;
Array<long, int, ArrayIterator2> v3;
就像非类型名称参数一样,没有理由类型名称参数不能具有默认值。