gpt4 book ai didi

C++11 可变参数 std::function 参数

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

一个名为 test 的函数需要std::function<>作为它的参数。

template<typename R, typename ...A>
void test(std::function<R(A...)> f)
{
// ...
}

但是,如果我执行以下操作:

void foo(int n) { /* ... */ }

// ...

test(foo);

编译器(gcc 4.6.1)说no matching function for call to test(void (&)(int)) .

制作最后一行 test(foo)编译和工作正常,我该如何修改 test()功能?在 test()功能,我需要f类型为 std::function<> .

我的意思是,是否有任何模板技巧可以让编译器确定函数的签名(例如 foo),并将其转换为 std::function<void(int)>自动?

编辑

我也想让 lambdas(有状态和无状态)也能做到这一点。

最佳答案

看起来你想使用重载

template<typename R, typename ...A>
void test(R f(A...))
{
test(std::function<R(A...)>(f));
}

这个简单的实现将接受您尝试传递的大部分(如果不是全部)函数。外来函数将被拒绝(如 void(int...))。更多的工作会给你更多的通用性。

关于C++11 可变参数 std::function 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242234/

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