使用自动模板和功能

时间:2015-01-29 17:28:29

标签: c++ c++14

这是传递lambda函数并返回包含n次lambda函数调用的std :: vector的正确C ++ 14样式吗?

// gen is a lambda function
auto returnN(auto gen, auto n){
    std::vector< decltype(gen()) > vec;
    for(auto i=0; i<n; i++){
       vec.push_back( gen() );
    }
    return vec;
}

1 个答案:

答案 0 :(得分:6)

没有

  1. 您需要明确使用template,除非您的编译器允许它作为扩展名。它可能来自C ++ 17。

    Is auto as a parameter in a regular function a GCC 4.9 extension?

  2. 您可能希望通过通用引用来获取仿函数/函数指针。

  3. 您忘了拒绝vector的元素类型。

  4. 你的循环有一个int类型的循环变量。这是否足够......

  5. template<class F>
    auto returnN(F&& gen, size_t n) {
        std::vector<std::decay_t<decltype(gen())>> vec; // Needs to decay
        while(n--)
            vec.push_back(gen());
        return vec;
    }