首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >做vector<vector<T...>>和做vector<vector<T>...>有什么不同

做vector<vector<T...>>和做vector<vector<T>...>有什么不同
EN

Stack Overflow用户
提问于 2013-05-06 00:12:59
回答 2查看 1.1K关注 0票数 13

我之前看到过这样的代码:

代码语言:javascript
复制
using A = std::vector<std::vector<T>...>

其中T是模板参数的可变列表。我想知道将参数包放在最后一个尖括号的末尾和第一个尖括号的末尾有什么不同。例如:

代码语言:javascript
复制
using B = std::vector<std::vector<T...>>;

这两个都编译得很好,但我不知道有什么不同。

有人能解释一下吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-06 00:16:54

在包扩展中,对包的每个元素重复...之前的模式,因此vector<T>...表示扩展到vector<T1>, vector<T2>, vector<T3>,而vector<T...>表示扩展到vector<T1, T2, T3>

如果参数包只有一个元素,它们是相同的,但是如果参数包有两个元素,那么很明显

代码语言:javascript
复制
std::vector<std::vector<T1>, std::vector<T2>>

代码语言:javascript
复制
std::vector<std::vector<T1, T2>>

是不一样的。第一个模板参数无法编译,std::vector的第二个模板参数必须是分配器类型,而不是向量类型。如果T2是一个分配器类型,那么第二个将会被编译。

票数 23
EN

Stack Overflow用户

发布于 2013-05-06 00:17:08

实例化A<T1, T2, T3>时,会将其扩展为:

代码语言:javascript
复制
std::vector<std::vector<T1>, std::vector<T2>, std::vector<T3>>

使用相同的模板参数来实例化B,您会得到:

代码语言:javascript
复制
std::vector<std::vector<T1, T2, T3>>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16386499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档