Проблема с шаблоном и лямбдой C ++ 0x - PullRequest
2 голосов
/ 13 апреля 2011
#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;
} 

Является ли decltype способом сказать лямбда-выражению, какой тип будет использоваться?

1 Ответ

2 голосов
/ 13 апреля 2011

Это, вероятно, приемлемо , однако, поскольку ваш код, похоже, ожидает исключительно итераторов, я думаю, что было бы более уместно следующее:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...