Using auto in a lambda function

后端 未结 4 1596
野性不改
野性不改 2020-12-13 17:22
#include 
#include 

void foo( int )
{
}

int main()
{
  std::vector< int > v( { 1,2,3 } );

  std::for_each( v.begin(), v.end()         


        
4条回答
  •  攒了一身酷
    2020-12-13 18:19

    This was discussed briefly by Herb Sutter during an interview. Your demand for auto arguments is in fact no different from demanding that any function should be declarable with auto, like this:

    auto add(auto a, auto b) -> decltype(a + b) { return a + b; }
    

    However, note that this isn't really a function at all, but rather it's a template function, akin to:

    template 
    auto add(S a, T b) -> decltype(a + b) { return a + b; }
    

    So you are essentially asking for a facility to turn any function into a template by changing its arguments. Since templates are a very different sort of entity in the type system of C++ (think of all the special rules for templates, like two-phase look-up and deduction), this would be radical design change with unforeseeable ramifications, which certainly isn't going to be in the standard any time soon.

提交回复
热议问题