【问题标题】:Default lambda argument in template function模板函数中的默认 lambda 参数
【发布时间】:2021-03-20 21:21:34
【问题描述】:

我想在模板函数中默认一个 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";
  });
}

【问题讨论】:

    标签: c++


    【解决方案1】:

    您不能从默认函数参数中推断出函数的模板参数。请参阅此question,了解为何实施此限制的详细信息。

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

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

    这是demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2016-05-23
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      相关资源
      最近更新 更多