Сообщение Re: std::function, could not deduce template argument от 14.02.2015 9:26
Изменено 14.02.2015 9:39 BulatZiganshin
Здравствуйте, 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
вот так работает:
может, можно соорудить конвертор? типа такого:
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; });
Re: std::function, could not deduce template argument
Здравствуйте, 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
вот так работает:
может, можно соорудить конвертор? типа такого:
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; });