gpt4 book ai didi

c++ - 传递非泛型函数的最有效方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:39:01 24 4
gpt4 key购买 nike

我正在学习 C++ 中的函数式编程。我的意图是传递一个非泛型函数作为参数。我知道模板方法,但是我想将函数签名限制为 API 设计的一部分。我制定了 4 种不同的方法 example on cpp.sh :

// Example program
#include <iostream>
#include <string>
#include <functional>

typedef int(functor_type)(int);


int by_forwarding(functor_type &&x) {
return x(1);
}

int functor_by_value(functor_type x) {
return x(1);
}

int std_func_by_value(std::function<functor_type> x) {
return x(1);
}

int std_func_by_forwarding(std::function<functor_type> &&x) {
return x(1);
}

int main()
{
std::cout << functor_by_value([](int a){return a;}); // works
std::cout << std_func_by_value([](int a){return a;}); // works
std::cout << std_func_by_forwarding(std::move([](int a){return a;})); // works

//std::cout << by_forwarding([](int a){return a;}); // how to move lambda with forwarding ?
}

以上尝试是否正确?如果没有,我该如何实现我的目标?

最佳答案

(基于评论的澄清)

可以使用 std::is_invocable:

限制签名
template<typename x_Action> auto
functor_by_value(x_Action && action)
{
static_assert(std::is_invocable_r_v<int, x_Action, int>);
return action(1);
}

online compiler

关于c++ - 传递非泛型函数的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873464/

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