我之前看到过这样的代码:
using A = std::vector<std::vector<T>...>其中T是模板参数的可变列表。我想知道将参数包放在最后一个尖括号的末尾和第一个尖括号的末尾有什么不同。例如:
using B = std::vector<std::vector<T...>>;这两个都编译得很好,但我不知道有什么不同。
有人能解释一下吗?谢谢。
发布于 2013-05-06 00:16:54
在包扩展中,对包的每个元素重复...之前的模式,因此vector<T>...表示扩展到vector<T1>, vector<T2>, vector<T3>,而vector<T...>表示扩展到vector<T1, T2, T3>
如果参数包只有一个元素,它们是相同的,但是如果参数包有两个元素,那么很明显
std::vector<std::vector<T1>, std::vector<T2>>和
std::vector<std::vector<T1, T2>>是不一样的。第一个模板参数无法编译,std::vector的第二个模板参数必须是分配器类型,而不是向量类型。如果T2是一个分配器类型,那么第二个将会被编译。
发布于 2013-05-06 00:17:08
实例化A<T1, T2, T3>时,会将其扩展为:
std::vector<std::vector<T1>, std::vector<T2>, std::vector<T3>>使用相同的模板参数来实例化B,您会得到:
std::vector<std::vector<T1, T2, T3>>https://stackoverflow.com/questions/16386499
复制相似问题