給定std::ranges::rangeC 20 中的 a,我如何確定該范圍內值的型別?
我想撰寫一個使 astd::vector超出任意范圍的函式。我希望這個函式有一個漂亮、明確的宣告。就像是:
template<std::ranges::range Range>
std::vector<std::value_type_t<Range>> make_vector(Range const&);
以下似乎有效,但宣告不明確且實作很丑陋(甚至忽略它沒有盡可能預先分配正確的大小)。
template<std::ranges::range Range>
auto make_vector(Range const& range)
{
using IteratorType = decltype(std::ranges::begin(std::declval<Range&>()));
using DerefType = decltype(*std::declval<IteratorType>());
using T = std::remove_cvref_t<DerefType>;
std::vector<T> retval;
for (auto const& x: range) {
retval.push_back(x);
}
return retval;
}
有沒有規范/更好/更短/更好的方法來做到這一點?
uj5u.com熱心網友回復:
您正在尋找的型別特征是拼寫的std::ranges::range_value_t,而不是std::value_type_t。
此外,您在這里嘗試撰寫的整個函式只是std::ranges::toC 23 中的一個更有限的版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/537514.html
