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

时间:2013-07-24 19:20:22

标签: c++ c++11

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

  

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

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