聲明一個迭代的值在C++ 98,我通常使用以下中的迭代器的值類型聲明變量:如何通過decltype
typename std::iterator_traits<Iterator>::value_type value;
在C++ 11我們有decltype和我原以爲來推斷該值類型的最簡單的方法是:
decltype(*iterator) value;
不幸的是,大多數迭代器,迭代器的*類型是VALUE_TYPE &,而不是VALUE_TYPE。任何想法,沒有類型修改類,如何按摩以上產生value_type(而不是任何參考)?
我不認爲這個問題是不合理的,因爲以下是相當強大的,但最終創建另一個變量。
auto x = *iterator;
decltype(x) value;
另外請注意,我真正想要的推導型並不僅僅是一個實例例如如果我想聲明這些值的std :: vector。
類型表達的'* iterator'被'的std :: iterator_traits :: reference',不'value_type'。這不一定是'value_type&','decltype'可能會根據它的值類別報告表達式的類型與實際不同。 –
2013-03-22 05:42:17
如果你只是想結合你的編輯的兩行,相當於'typename std :: decay :: type value;',但是看看下面的答案, t做到這一點:)我只是把這個添加爲['std :: decay'](http://en.cppreference.com/w/cpp/types/decay)在這個Q/A中沒有提到過。 –
2013-03-22 07:47:54