конверсия lambda в std::function
От: Vinick Россия  
Дата: 30.04.18 08:21
Оценка:
#include <string>
#include <functional>

template<typename U, typename F> class Bar;

template <typename T>
struct Foo {
    using value_type = T;
    template<typename U>
    Bar<U,Foo<T>> make_bar(std::function<U(const T&)> getter) {
        return Bar<U,Foo<T>>(*this,getter);
    }
};

template <typename U,typename F>
struct Bar {
    F & f;
    std::function<U(const F::value_type&)> getter;
    Bar(F & f_,std::function<U(const typename F::value_type &)> getter_):f(f_),getter(getter_) {
    }
};

int main() {
    Foo<std::string> foo;
    auto b = foo.make_bar<std::size_t>([](auto v) { return v.size();}); // <--- так работает
    //    auto b1 = foo.make_bar([](auto v) { return v.size();}); // <--- хочу вот так
    //   auto b2 = foo.make_bar([](auto v) ->std::size_t { return v.size();}); // <--- или хотя бы так
    return 0;
}


Есть ли способ избежать явной специализации при вызове make_bar?
с++14 lambda std::function
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.