................................................ ...................................................... ................................................
所以,我的理解是,在
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);
@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);