Информация об изменениях

Сообщение 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

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

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

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

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; });