gpt4 book ai didi

从 lambda 推导 C++ 模板

转载 作者:IT老高 更新时间:2023-10-28 12:53:27 27 4
gpt4 key购买 nike

我有一个函数需要两个 std::function s 作为参数。第二个函数的参数与第一个函数的结果类型相同。

我写了一个这样的函数模板:

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; });
}

有没有办法摆脱 <int>examplFunction<int>并让编译器推断 ResultType 的类型?

最佳答案

你真的需要 std::function 吗?当您需要类型删除时,std::function 很有用。使用模板,您通常可以完全跳过它:

template<class F1, class F2>
void examplFunction(F1 func, F2 func2, decltype(func2(func()))* sfinae = nullptr) {
auto x = func();
func2(x);
}

sfinae 参数确保该函数只能被函数调用,使得 func2 可以被 func 的结果调用。

关于从 lambda 推导 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52225371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com