c语言中vector函数参数,c – std :: vector作为模板函数参数

模板函数正确的方式来接受任何std :: vector的const&是:

template

void some_func( std::vector const& vec ) {

}

第二个参数是“allocator”,在某些高级使用std :: vector中,它不会是默认的.如果你只是接受std :: vector< T>,你的some_func将拒绝std :: vectors与替代分配器.

现在,还有其他方法来处理这个,我会很快列出.我会以降低的成本列出他们:收益比 – 上面的一个可能是你想要的,下一个有时是有用的,之后我将分支到很少值得考虑的过度工程案例(但可能是有用的)在某些角落的情况下).

你可以接受T&&&然后测试以确定typename std :: remove_reference< T> :: type是否是一种std :: vector.这将允许您对传入的std :: vector进行“完美转发”.它也可以让你改变你用来测试的谓词来接受不只是一个std :: vector:在大多数情况下,const& to std :: vector可能只需要一些随意访问的容器.

一个可笑的方式是做一个两步的功能.第二步采用类型擦除的随机访问范围视图(或者只是一个范围视图,如果你不需要随机访问)固定类型T与SFINAE,以确保传入的对象是兼容的,第一步推导出传入类型的容器类型,并调用SFINAE上下文中的第二步(auto some_func(…) – > decltype(…)).

作为std :: vector< T>的类型擦除常量和放大器;对于Ts的随机访问范围视图不会失去太多的功能,这样做的优点在于,您可以保证您的函数的正文与std :: vector< T>常量和放大器;对于T [n]和对于std :: array

翻译自:https://stackoverflow.com/questions/19094340/stdvector-as-a-template-function-argument

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值