使用自动模板和功能

Cha*_*ker 1 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;
}
Run Code Online (Sandbox Code Playgroud)

Ded*_*tor 6

没有.

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

    自动作为GCC 4.9扩展的常规功能中的参数吗?

  2. 您可能希望通过通用引用获取functor/function-pointer.

  3. 你忘了腐烂vector的元素类型.

  4. 你的循环有一个类型的循环变量int.这还不够......

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我可能会使用`vec.reserve(n);`并用`std :: generate_n(std :: back_inserter(vec),n,std :: forward <F>(gen))替换显式循环;`,虽然它主要是风格差异. (2认同)