tbx*_*are 4 c++ containers templates size-type
是否可以size_type从容器中获取类型别名,例如std::vector或std::map不提供value_type某种类型的 a ?
我正在编写一个程序,我需要size_type两种不同map类型的数据。但是,如果我为第一个映射类型创建 typedef,则该名称size_type对于第二个映射类型不可用。我的解决方法(又名“拼凑”)解决方案是说谎。
std::map<char, int> letters;
std::map<std::string, int> digraphs, trigraphs;
// This lie is good enough for both map types.
using size_type = typename std::map<int, int>::size_type;
Run Code Online (Sandbox Code Playgroud)
在其他情况下,我只是不想提供value_type. 这是一个人为的例子。
// Yes, I know this can be cleaned up by doing it in stages, but ugh!
using size_type = typename std::map<std::string, std::pair<std::string, std::string>>::size_type;
Run Code Online (Sandbox Code Playgroud)
最终,我们都知道size_type可能会成为 的别名std::size_t,即使在诸如 之类的极端情况下也是如此std::vector<bool>。尽管如此,我仍然尝试使用“正确”的方式做事size_type。
那么,有没有一种方法可以size_type不提供而获得value_type呢?
那么,有没有办法在不提供 value_type 的情况下获取 size_type 呢?
不,因为size_type每个 可以是不同的类型value_type。
当然,正如您自己所说,通常情况并非如此,而且size_type几乎总是这样std::size_t,但是标准库实现本身以及容器模板的用户定义的专业化都允许size_type针对不同的情况进行不同的定义value_type,并且没有要求它必须与 相关std::size_t。
甚至没有任何要求size_type必须小于或大于std::size_t。如果您希望拥有可与任何符合标准的实现一起使用的通用库代码,则必须始终size_type单独考虑并且不对它们的关系做出任何假设。
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |