c++ - 从 lambda 内部返回 C++11 中 lambda 的类型(平面映射函数)

标签 c++ c++11 lambda

我已经实现了一个受scala flat map启发的函数,我想知道我是否可以在lambda内部访问lambda的返回类型以避免在使用它时重复它

/**
 * Inspired on scala's flat map, provide a @param func which output will be flattened in the output
 * sequence, which is the return type of @param func
 */
template <typename IN, typename F>
auto flat_mapf(const IN& input, F func)
    -> decltype(func(std::declval<typename IN::value_type>()))
{
    decltype(func(std::declval<typename IN::value_type>())) output;
    auto outit = std::back_inserter(output);
    for (auto i = input.begin(); i != input.end(); ++i)
    {
        decltype(func(std::declval<typename IN::value_type>())) interm = func(*i);
        std::move(interm.begin(), interm.end(), outit);
    }
    return output;
}


// usage example, I would like to avoid repeating vector<size_t> type two times:
auto vo = flat_mapf(vi, [](const size_t& x) -> vector<size_t> {
    vector<size_t> res;
    for (size_t i = 0; i < x; ++i)
        res.push_back(x);
    return res;
});

最佳答案

你不能省略-> vector<size_t>吗?从用法示例中,编译器推断出 lambda 的返回类型?这样您只需说一次类型。

关于c++ - 从 lambda 内部返回 C++11 中 lambda 的类型(平面映射函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13513129/

相关文章:

c++ - 是否有适合 'ownership-in-a-package' 的 'handles' 可用?

scala - 使用 Lambda 表达式的复杂 Scala 类型推断

c++ - 如何使我的迭代器类看起来不像容器类?

c++ - 有什么办法可以在 utf-8 和平台无关的纯字符串之间进行转换吗?

c++ - 如何在 cpp 源文件中链接静态库?

c++11 - C++11 lambda 的正确缩进

node.js - 如何在 Lambda 函数中使用 AWS.CloudFront.Signer

c++ - 我的同事喜欢使用memset初始化struct,我怎样才能说服他不要这样做?

c++ - std::sort 算法内存使用情况

c++ - 我想开始使用 C++ 内联初始化,有什么不好的情况吗?