模板函数中的默认lambda参数

我想在模板函数中默认一个 lambda 参数,但它无法编译。我错过了什么?

template <typename F>
void foo(
  F f = [](){
          std::cout << "Hello!n";
        }
) {
  f();
}

int main() {
  foo();  // 1. does not compile

  foo([](){ // 2. this is ok
    std::cout << "Hello!n";
  });
}

回答

您无法从默认函数参数推导出函数的模板参数。有关为何实施此限制的详细信息,请参阅此问题。

所以你必须自己提供一个默认的模板参数。由于您需要 lambda 的类型和值,因此一个简单的方法是编写一次 lambda,然后在函数模板中使用它。

auto lambda = []() 
              {
                 std::cout << "Bye!n";
              };
        
template <typename F = decltype(lambda)>  // default parameter
void foo(F f = lambda)                    // default value  
{
  f();
}

这是一个演示


以上是模板函数中的默认lambda参数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>