NoS*_*tAl 2 c++ templates iterator decltype c++11
这是一个关于decltype......的微不足道的问题我有这样的事情:
using namespace std;
template< typename BIt >
void dostuff(BIt first, BIt middle, BIt last)
{
auto temp = *first;
for_each(first, middle, [](decltype((temp)) el)
{cout << el << " "; });
}
int main()
{
std::vector<int> vi{11,22,33,44,1,2,3,4,5};
dostuff(std::begin(vi), std::begin(vi) + 4, std::end(vi));
}
Run Code Online (Sandbox Code Playgroud)
我如何避免使用临时变量(如果取消引用.begin空向量的 an 是合法的,除了丑陋的 IDK :))?
您可能正在寻找(更详细,请注意)std::iterator_traits。
特别是,这解析为typename std::iterator_traits<BIt>::value_type。
我不认为使用它有什么好处,但它更冗长并且依赖于额外的包含,<iterator>. 如果你不想要临时变量,你可以很好地使用decltype(*first).