#include <iostream>
#include <algorithm>
#include <array>
using namespace std;
template<class T>
void func(T beg, T end)
{
typedef decltype(*beg) type;
std::for_each(beg, end, [](type t) { cout << t << endl; });
}
int main()
{
std::array<int, 4> arr = { 1,2,3,4 };
func(arr.begin(), arr.end());
return 0;
}
告诉lambda表达式将使用哪种类型时,decltype
是否可行?
答案 0 :(得分:2)
这可能可接受,但是由于您的代码似乎只是期望迭代器,我认为以下更合适:
typedef typename std::iterator_traits<T>::value_type type;
甚至更好(考虑到你如何使用它):
typedef typename std::add_reference<
typename std::add_const<
typename std::iterator_traits<T>::value_type
>::type
>::type type;