带有非类型名的模板参数重载last arg

时间:2019-06-07 06:58:46

标签: c++

为了方便起见,我正在设计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是非类型名。可以使用模板来实现此目的吗?还是每个专业都必须使用唯一的名称?

1 个答案:

答案 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;

就像非类型名称参数一样,没有理由类型名称参数不能具有默认值。