C++ 11 lambdas作为默认函数参数

non*_*gon 10 c++ c++11

我正在编写一个C + 11函数,它将可调用作为参数,我希望将该参数默认为无操作函数.到目前为止,这是我最好的尝试:

const std::function<void()> noop= [](){};
void f( int x, int y, std::function<void()> fn= noop ) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

我想知道标准库是否为我提供了"noop"std函数,还是我需要像上面那样编写自己的函数?我也想知道是否有办法避免明确命名"noop"功能.例如:

void f( int x, int y, std::function<void()> fn= [](){} ) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

将不会编译(在Visual Studio 2012 Update 3中),也不会:

void f( int x, int y, std::function<void()> fn= std::function<void()>([](){}) ) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

BЈо*_*вић 3

我想知道标准库是否为我提供了“noop”std 函数,或者我是否需要像上面那样编写自己的函数?

不,没有默认的 noop 函数。在这种情况下,您必须创建自己的(就像您对 noop 仿函数对象所做的那样)。