gpt4 book ai didi

c++ - 接受 lambda 函数和函数指针作为参数

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:53 25 4
gpt4 key购买 nike

我有一个函数,比方说

void processSomething(Arg1 arg1, Function t){
...
t(someVariable);
}

我希望以下两种用法都有效:

processSomething(myArg1, [&](SomeVariable someVar){...});
void(*myFunc)(void) = &someFunc;
processSomething(myArg1, myFunc);

但是,我发现在使用 void(*myFunc)(void) 作为参数声明时,我无法使用 lambda 方式。有什么方法可以在没有两个单独的函数或过于复杂地使用包装器的情况下同时使用这两种用法?

最佳答案

好吧,你有两个选择:

  1. 模板:

    template<class F>
    void processSomething(Arg1 arg1, F t){

    这是首选方式,因为它可以创建更高效​​的代码,但代价是可能出现代码重复。

  2. 使用 std::function 或类似的:

    void processSomething(Arg1 arg1, std::function<void(SomeVariable)> t){

    所涉及的间接寻址会产生运行时成本,但在每种情况下都会使用相同的代码。

关于c++ - 接受 lambda 函数和函数指针作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554221/

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