void*params有名字隐藏吗

is there name hiding for void* params?

本文关键字:隐藏 params void      更新时间:2023-10-16

我需要将一个成员函数传递给gsl_function,并使用本文[link]中描述的包装器(函数指针问题。如何从C++类有效地与C API(即gsl(接口?(。它起作用了,但当我试图理解它时,我有点困惑。基本上,我在代码中标记了三个void*参数ptr_par_0ptr_par_1ptr_par_2,很明显ptr_par_0=patr_par_1,但它们似乎从未在代码中初始化过,是真的吗?ptr_par_2确实被初始化为*this,但是ptr_par_0&ptr_par_1foo_wrapper函数的局部变量,所以我认为它们应该隐藏ptr_par_2,需要自己初始化。我想可能有一些我不知道的事情,谢谢你提前澄清。

class MyClass
{
    double foo(double x)
    {
       ...
    }
    static double foo_wrapper(double x, void *params)   //ptr_par_0
    {
        return static_cast<MyClass*>(params)->foo(x);   //ptr_par_1
    }
    double bar(double x)
    {
        ...
        gsl_function F;
        F.function=&MyClass::foo_wrapper;
        F.params=this;                                  //ptr_par_2
        // invoke GSL function passing in F
        ...
    }
};

将注释转化为答案:

GSL将调用类似F.function(x, F.params);(在GSL_FN_EVAL(&F,x)中(的

所以MyClass::foo_wrapper(x, this_from_bar)