Re: std::function, could not deduce template argument
От: BulatZiganshin  
Дата: 14.02.15 09:26
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>void f(std::function<void(T)> g)

CS> auto func1 = [](int x) { std::cout << x << std::endl; };
CS> f(func1);

такой код не будет работать ни в каком c++ даже без второго определения f, поскольку лямбда и std::function — разные типы, и автоматом привести к нужному типу сквозь темплейт не получится. во всяком случае в vc2013/gcc49

вот так работает:

void f(std::function<void(int)> g)
    f(func1);

может, можно соорудить конвертор? типа такого:

template <typename T>
std::function<T> cvt(T &x) {return x;}

    auto func1 = cvt([](int x) { std::cout << x << std::endl; });
Люди, я люблю вас! Будьте бдительны!!!
Отредактировано 14.02.2015 9:39 BulatZiganshin . Предыдущая версия . Еще …
Отредактировано 14.02.2015 9:28 BulatZiganshin . Предыдущая версия .
Отредактировано 14.02.2015 9:28 BulatZiganshin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.