如题,比如说我有一个指定类型的 std::function 实例,如一个 std::function<void(int)>,这个时候把 lambda 表达式赋值给 std::function 是完全没有问题的,示例代码如下:
#include<bits/stdc++.h>
using namespace std;
void solve(function<void(int)> func,int num) {func(num);}
int main() {
solve([](int num) {cout << num;},111);
return 0;
}
但是如果我将传入的 function 泛型化,则 C++ 编译器无法完成隐式的类型转换,比如将 solve 函数的定义替换为:
template <typename T>
void solve(function<T(int)> func,int num) {func(num);}
此时编译器报错,在这种情况下,有何方法能够避免显示的类型转换出现呢?