使用Lambda作为函数替换

时间:2018-02-19 22:22:11

标签: c++ lambda

我正在试图找出一种方法来传递lambda作为函数替换。

通常情况下,我会这样做:

InputExampleToMe( ... );

static int ExampleFunction( void *one, int two, int three, void *four )
{
    static_cast< std::string * >( four )->append( static_cast< char * >( one ), two * three );
    return two * three;
};

/* ... */

int main( )
{
    InputExampleToMe( ExampleFunction );
}

我试图看看是否有办法声明静态lambda作为参数传递。像这样:

InputExampleToMe( ... );

/* ... */

int main( )
{
    InputExampleToMe( [ ]( void *one, int two, int three, void *four )-> static int{ static_cast< std::string * >( four )->append( static_cast< char * >( one ), two * three ); return two * three; }; );
}

谢谢!

1 个答案:

答案 0 :(得分:0)

无状态lambda可以转换为具有相同签名的函数指针。

#include <string>

void InputExampleToMe(int (*pf)(void*, int, int, void*));

auto ExampleFunction = []( void *one, int two, int three, void *four ) -> int
{
    static_cast< std::string * >( four )->append( static_cast< char * >( one ), two * three );
    return two * three;
};

/* ... */

int main( )
{
    InputExampleToMe( ExampleFunction );
}

警告:垃圾进入,垃​​圾出来。