c语言中的std模版用法,c – 我可以使用std :: vector作为模板参数,还是需要std :: vector?...

本文探讨了如何实例化接受类模板作为参数的模板,特别关注std::vector的应用。遇到问题在于匹配带有默认参数的类模板,如std::vector,以及处理可变数量的类参数。实例化变得困难,尤其是当模板参数中包含整数常量时,需要使用std::integral_constant进行包装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这取决于你传递给它的是什么,如果你试图实例化的模板将一个类模板作为一个参数接受2(或c 11一个可变数量的)类,那么你可以将std :: vector传递给它.但是,在大多数情况下,模板需要类作为参数,并且您无法传递类模板std :: vector.

template

struct gimme_a_type{};

template class T>

struct gimme_a_template{};

gimme_a_type<:vector> //

gimme_a_type<:vector> > //

gimme_a_template<:vector> //

gimme_a_template<:vector> > //

为了响应您的编辑,使用类模板作为模板参数存在困难.在您尝试传递的类模板中有默认参数时,实际上很难匹配参数的数量(在我们的例子中是std :: vector).

请注意,上面的示例需要一个类模板,它需要2个类,而不只是一个.这是因为std :: vector接受两个参数,第二个参数默认为std :: allocator< T>为了我们.

以下示例演示了此问题:

template class Tem>

struct A

{

Tem v; //

Tem >; //

};

template class Tem>

struct A2

{

Tem v; //

};

C 11示例更好,但如果有人通过了一个具有签名模板< class的类,则bool = false> A3类它再次失败,因为A2需要一个可变数量的类,而不是可变数量的whatevers.所以即使A3< int>可能是一个有效的实例化,你无法将该类传递给A2.解决方案是始终在模板参数列表中使用类型,并使用std :: integral_constant包装器模板来传递整数常量.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值