【发布时间】:2016-04-07 17:57:46
【问题描述】:
我想要一个向量,其元素的类型为 vector::size_type
但是,您不能声明:
vector<vector::size_type> aVec;
因为 size_type 是模板本身的一部分,所以你必须使用类型本身,我需要这样的东西:
vector<vector<T>::size_type> aVec;
但是 T 应该是什么?这确实是一个循环问题。 :)
如果 vector 刚刚使用 size_t 作为它的大小类型(但没有针对 size_type 的特殊 typedef,它可能会根据 vector 所持有的类型而有所不同),我可以这样做:
vector<size_t> aVec;
但是,事实并非如此。我怀疑它被允许改变是有正当理由的,但是通过让它成为模板化向量类的一部分而不是在它之外,这使得这变得困难。
想法?
【问题讨论】:
-
我看不到这个的真正应用。您的矢量类型由其中存储的内容定义。你想存储向量的大小吗?属于哪一种?
-
如果您正在执行诸如将索引存储到另一个向量中的操作,请执行 othervector::size_type。如果您没有向量的模板类型,那么尝试为它获取
size_type甚至没有意义。使用size_t -
std::size_t只是X::size_type的别名,不是吗?现在寻找标准报价。 -
你说是递归问题。那么你是说你想构造一个向量只是为了存储该向量自己的大小?如果您不想存储向量类型自己的大小,那么为什么不访问其他向量类型的类型呢?或者你想存储不同类型向量的大小?那你可以试试
std::common_type<T1::size_type, T2::size_type>::type。但是 IIRC,size_type仅由分配器确定。但是,不要相信我的话。 -
@Mark 我不是说使用vector
::size_type,我的意思是只使用 size_t。期间。