本文介绍了c++ 模板类;具有任意容器类型的函数,如何定义它?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
好的,简单的模板问题.假设我像这样定义我的模板类:
问题是关于我的 bar 函数...我需要它能够使用某种标准容器,这就是为什么我包含模板/类型名称 C 部分来定义该容器类型.但显然这不是正确的方法,因为我的测试班然后抱怨:
错误:'bar' 未在此范围内声明
那么我将如何以正确的方式实现我的栏功能?也就是说,作为我的模板类的一个函数,具有任意容器类型......我的模板类的其余部分工作正常(具有不会导致错误的其他函数),这只是一个有问题的函数.
好的,所以特定函数(bar)是一个 eraseInRange 函数,它擦除指定范围内的所有元素:
一个如何使用它的例子是:
在这种情况下,v 是一个向量.
编辑 2:傻我!我应该在我的班级之外声明这个函数,而不是在里面……这是一个非常令人沮丧的错误.无论如何,感谢大家的帮助,虽然问题有点不同,但这些信息确实帮助我构建了函数,因为在找到我原来的问题后,我确实遇到了其他一些令人愉快的错误.所以谢谢你!
解决方案
特征解决方案.
概括不要超过需要,不要少于.
在某些情况下,该解决方案可能还不够,因为它会匹配具有此类签名的任何模板(例如 shared_ptr
),在这种情况下,您可以使用 type_traits
,非常像 duck-typing(模板通常是鸭式的).
一个好的模板通常不会人为地限制它们有效的类型(为什么要?).但是想象一下,在上面的示例中,您需要访问对象 const_iterator
,然后您可以使用 SFINAE 和 type_traits 将这些约束放在您的函数上.
或者只是像标准库那样
概括不要超过需要,不要少于.