【发布时间】:2020-07-25 08:59:06
【问题描述】:
我想从引用的容器中获取 value_type(例如std::string& str)
我能够这样做的唯一方法是首先剥离引用,然后访问底层类型,这样:
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中是否有任何模板可以以更简洁的方式进行这种操作?
【问题讨论】:
-
试试
decltype(*str.begin()) -
另外,
std::decay更短,在这种情况下等效于std::remove_reference,所以std::decay_t<decltype(str)>::value_type -
std::string::value_type应该可以正常工作。有理由不直接做吗? (也就是说,这个问题是否缺少一个重要的约束?) -
@PeteBecker,全部原因是不直接使用 std::string。例如如果我将参数类型更改为 std::wstring 我仍然希望它能够在不更改任何函数代码的情况下工作。
-
编写自己的类型转换很容易。