关于 lambda 表达式和 std::function 的隐式转换
  • 板块学术版
  • 楼主TLEWA
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/4 22:56
  • 上次更新2024/4/5 10:42:32
查看原帖
关于 lambda 表达式和 std::function 的隐式转换
515129
TLEWA楼主2024/4/4 22:56

如题,比如说我有一个指定类型的 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);}

此时编译器报错,在这种情况下,有何方法能够避免显示的类型转换出现呢?

2024/4/4 22:56
加载中...