C++访问回调数据

问题描述 投票:0回答:2

................................................ ...................................................... ................................................

c++ callback
2个回答
1
投票

所以,我的理解是,在

 func_wrapper::caller
中,您希望能够访问回调中的包装类。不幸的是,你这样做的方式是不可能的。没有(合法的)方法可以进入函数内部并访问其参数。

但是,如果您将操作分解为其组成部分,您就可以做您想做的事。你会想要一个更像这样的调用者函数:

template <typename Type, typename Function>
void caller(Type&& functor, Function function, int val)
{
   std::cout << " value entered into function: " << val << std::endl;
    
   std::invoke(function, functor, val);

   std::cout << "value inside wrapper: " << functor.getResult().number << "\rn";
}

然后这样称呼它。

fw.caller(func, &fun::f, origValue);

https://godbolt.org/z/151YfEeoo


0
投票

@JohnFilleau 提到要传递类对象而不是类内的函数。以下是基于他提供的示例代码的解决方案,我修改了该示例以使用该示例。我意识到这个问题很令人困惑,但要感谢 JohnFilleau 和 Taekahn 的讨论。

在main.cpp中

int main()
{
    func_wrapper fw;
    fun func;
    int origValue = 5;
    fw.caller2(func, origValue);
return 0:
}

func_wrapper::caller2

    void func_wrapper::caller2(fun& fun, int val)
{
    std::cout << " value entered into function: " << val << std::endl;
    fun.f(val);
    int output = fun.getResult().number;
    std::cout << " did this work: " << output << std::endl;

}

在标题中我必须添加

#include "func.h"

对标题进行如下更改

void caller2(fun& fun, int val);
© www.soinside.com 2019 - 2024. All rights reserved.