例如,我有类似的代码:
template<typename A, typename B>
using Map = std::map<A, B>;
template<typename A, typename B>
using UnorderedMap = std::unordered_map<A, B>;
我想为std::array
做同样的事情,即:
template<typename A, typename B>
using Array = std::array<A, B>;
但是,如果执行此操作,则会出现编译器错误:
错误C2993:'B':非类型模板参数'_Size'的非法类型
错误C2955:“ std :: array”:使用类模板需要模板
参数列表array(21):消息:请参见'std :: array'的声明
是否有任何方法可以声明在后台使用Array
的{{1}}?
最后,我想使用std::array
之类的数组,而不是Array<int, 7> items
。
答案 0 :(得分:12)
std::array
的第二个模板参数是类型为std::size_t
的{{3}}。应该是
template<typename A, std::size_t B>
using Array = std::array<A, B>;
答案 1 :(得分:4)
std::array
的第二个模板参数不是类型而是size_t
,因此语法应为
vvvvvv
template<typename T, size_t S>
using Array = std::array<T, S>;