将 void 指针和结构传递给函数 -c++

Passing void pointer and structures to functions -c++

本文关键字:函数 -c++ 结构 void 指针      更新时间:2023-10-16

我有一个函数,它将指向 void 的指针作为参数。所以我向这个函数传递了一个结构,但在该函数中,我调用另一个函数 (f_pD),该函数将结构 (struct) 作为参数。在函数f_mD1内部,我重置了结构,然后调用f_pD函数,该函数将结构作为参数。一旦我在主函数中完成,我就不想重置我的结构。谁能帮我? 下面是代码的草图。enter code here

    #include <fstream> 
    #include <map>
    using namespace std;
    struct pr_pD {
        int last;   double xD;  map <double, double> tab_w;
    } geral;
    double f_pD  (double, double, double, double, struct pr_pD geral);
    double f_mD1 (double, double, double, double, struct pr_pD geral);
    static int Integrand_pD(const int *ndim, const double k[], const int *ncomp, double FG[], void *parametros) 
    {   
        struct pr_pD * fp = (struct pr_pD *)parametros;             
        FG[0] = fp->last*fp->xD;       
    }
 static int Integrand_mD1(const int *ndim, const double k[], const int *ncomp, double F[], void *parametros) 
{   
    struct pr_pD * fp = (struct pr_pD *)parametros; 
    // ------------------------------------------- 
    // I want to eliminate this part of the code
    struct pr_pD geral;
    geral.tab_w = fp->tab_w;
    geral.last  = fp->last; 
    geral.xD    = fp->xD;       
    //----------------------------------------------
    double pD;
    pD = f_pD( fp->xD*k[1], fp->last*k[2], k[3], k[0], geral ); 
    F[0] = 2*pD;    
}
int main()
{   
    tab_w.insert(pair<double, double>( 1 , 2 ) );   
    geral.tab_w =  tab_w;       
    geral.last     = 1; 
    geral.xD       = 2.5;

    double mD1
    mD1 = f_mD1(1, 1, 1, 0.1, geral );
    return 0;   
}
double f_pD(double xD, double yD, double zD, double tD, struct pr_pD geral)
{   
    double val_int; 
    val_int = Cuhre(Integrand_pD, xD, yD, zD, tD);  
    return geral.last*val_int;
}
double f_mD1(double xD, double yD, double zD, double tD, struct pr_pD geral)
{   
    double val_int;
    val_int=Vegas(Integrnd_mD1, xD, yD, zD, tD);
    return geral.last*val_int;      
}

您可以使用 *fp 代替 geral 参数,只需省略您说要删除的代码即可。

pD = f_pD( fp->xD*k[1], fp->last*k[2], k[3], k[0], *fp ); 

顺便说一下,这些函数不会修改它们的 geral 参数,因此可以通过引用接受该参数,从而避免潜在的昂贵副本:

double f_pD(double xD, double yD, double zD, double tD, const pr_pD& geral)