是否可以从容器(如std::vector
或std::map
)中获取size_type
的类型别名,而不需要提供某种value_type
?
我正在编写一个程序,需要使用两种不同的map
类型的size_type
。然而,如果我为第一个map
类型创建一个typedef,那么第二个map
类型将无法使用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;
在其他情况下,我宁愿不提供一个"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;
说到底,我们都知道size_type
很可能会成为std::size_t
的别名,即使在像std::vector<bool>
这样的特殊情况下也是如此。尽管如此,我仍然试图以“正确”的方式来做事,使用size_type
。
那么,有没有办法在不提供value_type
的情况下获取size_type
呢?
size_type
吗? - HolyBlackCatsize_type
。它太啰嗦了,而且很少见到代码一致使用它。我是那些通常在任何地方使用size_t
的异类之一。也许我是问题的一部分。 - paddystd::size_t
是足够正确的。 - HolyBlackCatstd::size_t
。无论如何,它始终是std::size_t
。关于它可能有所不同的理论讨论并不实用。 - Aykhan Hagverdilistatic_assert(std::is_same_v<std::size_t, decltype(letters)::size_type>);
,对于digraphs
等也会类似进行断言,然后在此之后使用std::size_t
。这样我就不必撒谎了! - tbxfreeware