我有一个函数,它接受两个std :: function
作为参数。第二个函数的参数类型与第一个函数的结果相同。
我编写了一个这样的函数模板:
template<typename ResultType>
void examplFunction(std::function<ResultType()> func, std::function<void(ResultType)> func2) {
auto x = func();
func2(x);
}
我可以这样调用它:
void f() {
examplFunction<int>([]() { return 1; }, //
[](int v) { std::cout << "result is " << v << std::endl; });
}
有没有办法在examplFunction<int>
中去掉<int>,让编译器推断出ResultType
的类型?
std::function
。std::function
是一种类型擦除工具。类型推导和类型擦除是彼此相反的。如果您正在推断类型擦除工具的类型,那么几乎总是会出错。 - Yakk - Adam Nevraumont