模板函数返回类型从lambda的返回类型

时间:2014-07-31 21:13:57

标签: c++ templates types lambda

我试图找出一个函数所需的返回类型,该函数返回一个按照模板化迭代器Iter的值类型键入的无序映射,以及使用值的值调用lambda(F)的结果。迭代器。我在C ++ 1y模式下使用GCC 4.9.1进行编译。

就我而言,这可能会走向完全错误的方向,因为我的模板经验很少。

template<typename Iter, typename Func>
unordered_map<Iter::value_type, decltype(F(*Start)) Map(Iter Start, Iter End, Func F)

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:4)

template< class Iter, class Func>
auto Map( Iter Start, Iter End, Func F )
    -> unordered_map<typename Iter::value_type, decltype(F(*Start))>

更一般地说,您可以leverage std::function推导出已知函数类型的结果类型,

template< class Func >
struct ResultOf
{
    typedef typename std::function<
        typename std::remove_pointer<Func>::type
        >::result_type T;
};