模板的模板参数匹配报错问题
2015-09-06 17:35
756 查看
今天写一个模板类,使用了模板的模板参数,在实例化类对象时,报错:
1. 在VS2013中错误编码为:
2. 在G++中错误信息为:
以下是简单版的源代码与实例化操作:
研究半天发现原因为:标准库中 std::vector 等类模板还有另一个参数:即第二个参数(也就是内存分配器 allocator),其有一个缺省值,但在匹配CONT 时,类模板 CONT 仅声明了一个模板形参,因此,实例化中的 std::vector 与 CONT 不匹配
解决办法为:修改类模板的声明,改为一下形式:
1. 在VS2013中错误编码为:
error C3201: 类模板“std::vector”的模板参数列表与模板参数“CONT”的模板参数列表不匹配
2. 在G++中错误信息为:
error: type/value mismatch at argument 2 in template parameter list for ‘template<class T,template<class ELEM> class CONT> class X'
以下是简单版的源代码与实例化操作:
[code]template<typename T, template<typename ELEM> class CONT = std::deque> X { CONT<T> elem; public: X(CONT<T> const & temp) : elem(T){} }; int main() { X<int,std::vector> x; //该实例化语句报错 }
研究半天发现原因为:标准库中 std::vector 等类模板还有另一个参数:即第二个参数(也就是内存分配器 allocator),其有一个缺省值,但在匹配CONT 时,类模板 CONT 仅声明了一个模板形参,因此,实例化中的 std::vector 与 CONT 不匹配
解决办法为:修改类模板的声明,改为一下形式:
[code]template <typename T, template< typename ELEM, typename ALLOC = std::allocator<ELEM> > class CONT = std::deque> class X { //... }; //此时实例化将不会再出错
相关文章推荐
- POJ 3274 Gold Balanced Lineup hash
- Java 接口 实现和继承关系与区别
- android新组件RecyclerView使用介绍和进阶使用,替用Gallery
- git 删除index.lock文件
- 字符串深入学习
- android开发之记录ListView滚动位置
- PE文件结构部分解析以及输入的定位
- js调用百度地图搜索功能
- android开发之记录ListView滚动位置
- web 间的通信问题解决方案
- 正则表达式
- Sphinx语音识别学习记录 (三)-小范围语音英文识别
- ZOJ 2872 Binary Partitions
- 开源视频图像处理算法
- 计算程序运行的时间一个函数
- 最快最简单的排序—桶排序
- spring security
- 颜色的意象
- spark1.4.1中sparkR的编译使用全过程
- strpbrk