我想从引用的容器(例如std::string& str
)中获取value_type
我能够这样做的唯一方法是首先剥离引用,然后通过这种方式访问基础类型:
std::unordered_set<std::remove_reference_t<decltype(str)>::value_type>
如果我使用的是C ++ 11,那会更糟:
std::unordered_set<std::remove_reference<decltype(str)>::type::value_type>
我发现它太冗长而且不太干净。
STL中是否有任何模板以更简洁的方式进行这种操作?
C ++ 20添加了iterator trait aliases,可让您结合std::begin
及其兄弟姐妹来执行此操作。
以下名称可以从任何开始的迭代器value_type
命名为c
,包括传统的内置数组:
std::itr_value_t<decltype(std::begin( c ))>;